不走索引的情况
没有查询条件没where 后面的内容 查询条件没索引.
查询条件没引导列. 没有有索引的列.
查询数量是超过表的一部分,mysql30%,oracle 20%.
索引失效,索引插入过多可能发生意外失效.
查询条件使用函数在索隐列上面.计算等.
查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,*,/,! 等). 错误的例子:select * from test where id-1=9; 正确的例子:select * from test where id=10;
对小表查询.
统计数据不真实.
CBO计算走索引花费过大的情况.
查询条件字符串和数字等的隐式转换.
使用不等于(!= 或者<>)的时候MySQL 无法使用索引.
%% 两个百分号不走索引,开始的结尾的百分号走索引.
not in 、not exist 、or 、 in 尽量转换为union.
time 和date 时间格式不一致.
B-tree索引is null不会走,is not null会走,位图索引 is null,is not null 都会走.
索隐列避免空列,一般选非空的列.
Join 语句中Join 条件字段类型不一致的时候MySQL 无法使用索引.
过滤字段使用了函数运算后(如abs(column)),MySQL 无法使用索引.
MyISAM 存储引擎索引键长度总和不能超过1000 字节.
BLOB 和TEXT 类型的列只能创建前缀索引.
Last updated