使用联合索引的一种情况
实际工作中,总是避免全表扫描,于是针对慢sql
中的一些字段上建立索引。
建立索引的意义,即本来在表中扫描和运算的操作,放在了索引中去执行,减少表的扫描行数,所以加快了查询速度。
但单纯的在每个字段上建立索引,并不一定达到预期的效果,看下面的sql
:
select avg( score ) from table where group = A;
上面的sql
的目的,是要查询A
分组的平均分数。于是在group
、score
上分别建立两个索引。
它先用 group
索引到表中查询出所有 group=A
的行,建立临时表,将查询结果放进临时表,紧接着在临时表中进行运算。结果是仍然扫描了大量的行数,并且创建临时表的开销是比较大的,实际上score
索引已经没有意义了。
于是针对这条 sql
的优化是失败的,正确的索引是建立group
和score
的联合索引,这意味了查询完全不用回表,直接在索引中查询返回了结果。
但仍需注意联合索引的顺序,group
在前,score
在后。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: