日志类型
数据类型
1.更小的通常更好
能正确存储的最小数据类型,优点是占用磁盘、内存和CPU都少
2.简单就好
3.尽量避免使用null
在数据库中null不等于null
对游湖和索引和值的比较都很复杂
MyISAM和InnoDB存储引擎对比
对比项 | MyISAM | InnoDB |
---|---|---|
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行级锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 | 行锁,操作时只锁一行,不对其他行有影响,适合高并发的操作 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真是数据,对内存要求较高,而且内存大小对性能由决定性的影响 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
默认安装 | 是 | 是 |
MySQL数据结构之最左匹配
MySQL InnoDB B+树,叶子节点直接放置整条数据
注意:
- InnoDB是通过B+Tree结构对主键创建索引,然后叶子节点中存储记录,如果没有主键,那么会选择唯一键,如果没有唯一键,那么会生成一个6字节的row_id来作为主键
- 如果创建索引的键是其他字段,那么在叶子节点中存储的是该记录的主键,然后再通过主键索引找到对应的记录,叫做回表。简单来说就是数据库会再根据索引创建一个B+Tree,这个树中存的就是索引和对应的主键
回表:就是上述情况,比如主键是id,索引列是name,这样查找name=‘AAA’,就会是先查找name,找到后根据name对应的id,再到另一个索引树中找到id对应的完整的一条数据
聚簇索引:数据和索引放在同一个文件中(比如:InnoDB)
非聚簇索引:数据和索引分开放在两个文件中(比如:MyISAM)
分布式程序不建议主键自增,会引发页分裂和页合并的问题
普通单机程序建议使用主键自增
回表
比如主键是id,并且给name添加了索引,此时数据库会创建两个B+Tree,如果执行select * from table where name = ?,会先在name和id的树中找到id,再用id在另一个树中找到整条数据,这就是回表
索引覆盖
上述情况中,如果查询select id from table where name = ?,直接查询一个树就能得到结果,不用回表就叫索引覆盖
索引下推
select * from table where name = ?and age = ?
这条语句执行的话,会从磁盘先查出符合name = ?的所有数据,加入到mysql server中,再根据age进行筛选
有了索引下推后,会根据name和age来拉取数据,不用在server层做数据的筛选
最左匹配
组合索引,比如name+age,一定是先匹配name再匹配age
举例:
- where name = ? and age = ?
- where name = ?
- where age = ?
- where age = ? and name = ?
上述例子中1,2,4会使用索引,4会经过优化成为1
CBO:基于成本的优化
RBO:基于效率的优化
索引下推唯一的缺点是需要在磁盘上多做数据筛选,原来的筛选是放在内存中的,现在放到了磁盘查找数据,并且所有的数据是聚集存放,所以性能不会有影响,而且整体的IO量会大大减少,反而会提升性能
MySQL中的一些名词和概念
MRR:
全称是mult_range read
在内存中做排序
FIC
全称是fast index create
没有FIC时索引的修改过程:
- 先创建一个临时表,增删改的操作在临时表中操作
- 删除原始索引表
- 修改临时表替换原始表
有了FIC后的索引修改过程:
FIC给当前表添加一个share锁,不会有创建临时文件的资源消耗,还是在源文件中,但是此时如果有人发起DML操作,很明显数据完全不一致,所以添加share锁,读取没问题,但是DML会有问题
这部分名词和概念还需要仔细百度一下
索引分类
- 主键索引:主键
- 唯一索引:值唯一的列
- 普通索引:也叫辅助索引、二级索引,除了主键和唯一列以外的创建了索引的列
- 全文索引:很少使用,被ES搜索引擎取代
- 组合索引:多个字段组合的索引
引匹配方式
- 全值匹配:组合索引中的所有的列进行匹配
- 匹配最左前缀:只匹配前面的几列
- 匹配列前缀:可以匹配某一列的开头部分(like A%可以正常匹配,like %A则会导致索引失效)
- 匹配范围值:可以查找某一个范围的数据
- 精确匹配某一列并范围匹配另一列:可以查询第一列的全部值和第二列的部分值
- 只访问索引列:查询的时候值需要访问索引,不需要访问数据行,本质上i就是索引覆盖
哈希索引
索引优化的小细节
索引监控
MySQL基础知识
MySQL索引详解
标签:匹配,name,age,知识,汇总,id,索引,Mysql,主键 From: https://www.cnblogs.com/qiulong/p/16758573.html