使用联合索引的一种情况

实际工作中,总是避免全表扫描,于是针对慢sql中的一些字段上建立索引。

建立索引的意义,即本来在表中扫描和运算的操作,放在了索引中去执行,减少表的扫描行数,所以加快了查询速度。

但单纯的在每个字段上建立索引,并不一定达到预期的效果,看下面的sql

select avg( score ) from table where group = A;

上面的sql的目的,是要查询A分组的平均分数。于是在groupscore上分别建立两个索引。

它先用 group 索引到表中查询出所有 group=A的行,建立临时表,将查询结果放进临时表,紧接着在临时表中进行运算。结果是仍然扫描了大量的行数,并且创建临时表的开销是比较大的,实际上score索引已经没有意义了。

于是针对这条 sql的优化是失败的,正确的索引是建立groupscore的联合索引,这意味了查询完全不用回表,直接在索引中查询返回了结果。

但仍需注意联合索引的顺序,group在前,score在后。

本作品采用《CC 协议》,转载必须注明作者和本文链接

简洁略带风骚

讨论数量: 1

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!