比如select xxx from table where name= 'a'order by user_no
,这条查询语句可以选择在name上建立索引,也可以选择在user_no 上建立索引 , 后者可以优化排序 。
2.考虑列中不重复的个数建立索引select xxxx from table where sex=1
这里不要为sex
性别建立索引,性别通常只有男和女,为其建立索引 , b+树只有两个节点,查找之后还要对一半的进行回表 , 不如直接走全表扫描
3.索引列尽可能小mysql基本数据类型十分丰富,整数类型有tinyint
,mediumint
,int
, bigint
,我们应该尽量使用占用字节数小的数据类型,这样可以让每次读取磁盘获取一页的数据,可以获得更多的范围信息
4.为列前缀进行索引比如说有英文名可能很长,每次都是根据FirstName 进行like查找,这时候可以选择为列的前10个字符建立索引(alter table user add index idx_name(name(10))
) 。但是十个字符之后将无法使用索引 。且前缀索引会无法使用到覆盖索引减少回表的功能,比如select name id,where name=abc123
,加入为name前三个字符建立了索引 , 会在前缀索引中找到符合的数据比如abc111,abc121等等
这个时候name的前缀索引还是需要获取主键回表然后判断name是否符合要求 。
5.合理的建立覆盖索引在联合索引小节中,我们总结了联合索引的好处,减少回表,优化排序和分组,索引下推 。
6.不要在uuid上建立索引首先uuid占用字节大 , 导致每一页范围信息少,并且uuid无序,这会导致插入数据的时候节点的分裂 。这里也说明了自增主键优秀的点,不会频繁的节点分裂 , 并且不要修改主键,避免不必要的节点分裂 。相比于uuid作为主键,不如使用分布式自增主键生成的方案
7.存在联合索引的情况下 , 不要重复建立索引存在name,age
的联合索引 , 那么不需要再为name单独建立索引了,但是可以为age建立索引,原理在联合索引中进行了讲解 。
8.尽量使用自增主键自增主键能减少聚簇索引的页分裂,如果插入的主键一会儿天一会儿底,会造成页面的分裂,同样更新主键也会导致移动复制
9.普通索引和唯一索引如何做出抉择如果业务逻辑可以保证索引列的唯一,不需要依赖唯一索引保证唯一性的话,尽量使用普通索引 。
9.1普通索引唯一索引等值查询的性能差异微乎其微,唯一索引略胜一筹对于普通索引来说 , 查找到满足条件的第一个记录 (5,500) 后,需要查找下一个记录,直到碰到第一个不满足 k=5 条件的记录 。对于唯一索引来说 , 由于索引定义了唯一性 , 查找到第一个满足条件的记录后,就会停止继续检索 。InnoDB 的数据是按数据页为单位来读写的 。也就是说,当需要读一条记录的时候,并不是将这个记录本身从磁盘读出来 , 而是以页为单位,将其整体读入内存 。在InnoDB 中 , 每个数据页的大小默认是 16KB,也就是说只有唯一索引满足等值条件的数据跨页的时候,才需要再一次io,这个概率是比较小的
9.2插入和更新的效率,普通索引由于唯一索引对于唯一索引来说 , 需要将数据页读入内存,判断到没有冲突,插入这个值,语句执行束;对于普通索引来说,则是将更新记录在 change buffer,语句执行就结束了
当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InooDB 会将这些更新操作缓存在 changebuffer 中,这样就不需要从磁盘中读入这个数据页了 。在下次查询需要访问这个数据页的时候 , 将数据页读入内存,然后执行 change buffer 中与这个页有关的操作 。通过这种方式就能保证这个数据逻辑的正确性.change buffer 在内存中有拷贝,也会被写入到磁盘上 。将 change buffer 中的操作应用到原数据页 , 得到最新结果的过程称为 merge 。除了访问这个数据页会触发 merge 外 , 系统有后台线程会定期 merge 。在数据库正常关(shutdown)的过程中,也会执行 merge 操作
八丶索引失效

文章插图
上图是mysql的基本架构 , 其中存在优化器,其作用是不改变sql执行j结果的情况下,让sql更加简单,并且根据成本分析,制定执行计划 。是否走索引,走什么索引也是优化器来决定的(sql中可以提示使用什么索引,强制使用某一个索引) 。
推荐阅读
- 记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节
- 发朋友圈的七种步骤(发朋友圈的细节和技巧)
- 库克首次回应iPhone13的细节_iphone13官方最新消息
- 上官婉儿怎么免伤害连招(上官婉儿怎么玩连招细节)
- 英雄无敌类网游小说推荐 英雄无敌类网游
- 关于劳力士格林尼治可乐圈复刻表做工细节怎么样
- 细节作文800字高中议论文 爱在细节处高中作文800字
- 英雄无敌3历代记是什么 英雄无敌3历代记是什么?
- 梧州藤县男孩走失三天获救,警方披露搜救细节,孩子是如何被找到的?
- 假面骑士空我究极形态和假面骑士ghost无限魂形态哪个厉害?