口诀
不等not null还有or,索引全中也无效;
大等小等is null,全索命中才有效;
除此全匹最高效,最左匹配要记牢;
大小跳索百分号,后面用索也无效;
索无函数和计算,才能保证索有效。
解释
sql中只要包含了!=
not null
or
,会导致sql中全部索引失效。但是 is null
>=
<=
不会。
>=
<=
is null
只会有两种情况:只有在命中了全部索引,也就是组合索引中的索引全用到了才会都有效并且是全部有效,否则就全无效。
组合索引中除了上面的特例外,sql中用到的索引全部命中肯定效率最高,而且还要保证最左匹配原则。
在最左匹配原则下,如果遇到大于号>
,小于号<
,跳过组合索引中的某个索引直接用下个索引列,like中的左%
(%号写最右边,写左边会导致索引失效),那么当前索引列有效,这些符号右边的索引列也会失效。
索引列上不要用函数和计算,函数和计算也会使索引失效。
外话
以上纯属个人总结,若有不对的地方还希望大家指出。不喜勿喷