MySQL 索引选择原则分析(二)

て烟熏妆下的殇ゞ 提交于 2019-11-28 14:53:38

2:MySQL索引选择规则(唯一索引查询)

students_origin表中只有主键,没有建立索引。

select id, name from students_origin;

根据MySQL 索引选择原则分析(一)2.1来分析,所以只能是全表扫描。

students表中除主键外,还有3个索引唯一索引name,普通索引major,rank,联合索引rank/total。

select id, name from students;

根据MySQL 索引选择原则分析(一)2.1来分析,所以只查询了一次辅助索引name。获取到结果集。

select id, major from students;

根据MySQL 索引选择原则分析(一)2.1来分析,所以只查询了一次辅助索引major。获取到结果集。

3:MySQL索引选择规则(多个索引查询)

select id, rank from students;

根据MySQL 索引选择原则分析(一)2.1与2.3来分析,索引被2个索引覆盖,所以选择了索引长度最短的做查询,获取到结果集。

4:MySQL索引选择规则(联合索引查询)

select id, rank, total from students;

根据MySQL 索引选择原则分析(一)2.1来分析,所以只查询了联合索引rank/total。获取到结果集。

5:MySQL索引选择规则(条件索引查询)

根据MySQL 索引选择原则分析(一)2.1来分析,查询的结果集中包含了rank/total字段,应该走的是联合索引,但是

查询执行计划为:

没有走联合索引,而是选择了rank索引,主要原因是where条件改变了查询优化器的处理逻辑。查询优化器根据查询条件通过基于代价的处理,选择查询代价最低的索引。也就是说,首先通过索引idx_rank查找键值,在通过主键id查找对应的记录,也就是需要2次IO操作。反而不如直接走联合索引(只需一次IO操作)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!