不走索引的情况

  1. 没有查询条件没where 后面的内容 查询条件没索引.

  2. 查询条件没引导列. 没有有索引的列.

  3. 查询数量是超过表的一部分,mysql30%,oracle 20%.

  4. 索引失效,索引插入过多可能发生意外失效.

  5. 查询条件使用函数在索隐列上面.计算等.

  6. 查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,*,/,! 等). 错误的例子:select * from test where id-1=9; 正确的例子:select * from test where id=10;

  7. 对小表查询.

  8. 统计数据不真实.

  9. CBO计算走索引花费过大的情况.

  10. 查询条件字符串和数字等的隐式转换.

  11. 使用不等于(!= 或者<>)的时候MySQL 无法使用索引.

  12. %% 两个百分号不走索引,开始的结尾的百分号走索引.

  13. not in 、not exist 、or 、 in 尽量转换为union.

  14. time 和date 时间格式不一致.

  15. B-tree索引is null不会走,is not null会走,位图索引 is null,is not null 都会走.

  16. 索隐列避免空列,一般选非空的列.

  17. Join 语句中Join 条件字段类型不一致的时候MySQL 无法使用索引.

  18. 过滤字段使用了函数运算后(如abs(column)),MySQL 无法使用索引.

  19. MyISAM 存储引擎索引键长度总和不能超过1000 字节.

  20. BLOB 和TEXT 类型的列只能创建前缀索引.

Last updated