概念
关于索引的三星原则
第一颗星:包含所有可匹配的索引列(使得索引片尽量的窄)
eg.
select a,d,f from tb where a='xxx' and b='yyy' and c='zzz' order by d,e;
索引需要包含a,b,c三列;
第一颗星如果包含a,b,c三列可以保障索引片尽量的窄(涉及到索引的过滤性)
第二颗星:避免排序
eg.
select a,d,f from tb where a='xxx' and b='yyy' and c='zzz' order by d,e;
索引需要包含d,e,同时满足d,e的排序;
第二颗星可以避免额外的排序操作,避免filesort;
第三颗星:包含所有查询项
eg.
select a,d,f from tb where a='xxx' and b='yyy' and c='zzz' order by d,e;
个人理解第三颗星的查询项指的是a,d,f,而不是所有三颗星涉及到的a,b,c,d,e,f;
第三颗星可以保证访问索引即可,不需要回表验证;(每一次回表都会产生随机IO)
重要程度:
第三颗星第一颗星>
网友评论