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;

 

posted @ 2014-05-25 21:53  高性能golang  阅读(1121)  评论(0编辑  收藏  举报