SQL走不了索引的情况
谓词使用IN、NOT IN、EXISTS、NOT EXISTS
< 、> 、= 、!= 、<>、if null 、between依然可以走索引。
LIKE前通配
like后通配依然可以走索引。
索引列使用了函数、数学运行、其他表达式等
建议:不要在where的过滤字段上加函数,而应该在比较值上加函数。
隐式类型转换
强制使用特定的索引
mysql会从possible_keys中选择一个代价小的索引,但并不是每次都能做出正确的选择。比如上例中where条件中包含了id和deliverTime,id是主键,deliverTime是索引,从下面的运行耗时来看mysql选择了按id进行查找,但实际上这样将扫描大量的数据,非常耗时。好在我们可以使用force index强制告诉mysql按哪个索引进行查找。
强制不使用特定的索引
select * from user_deliver ignore index(idx_delTime) where id>42342 and deliverTime>20160101;
本文来自博客园,作者:高性能golang,转载请注明原文链接:https://www.cnblogs.com/zhangchaoyang/articles/3735951.html