什么情况下不走索引?
跳到导航
跳到搜索
1. 数据类型不一致
例如,在查询条件中,列的数据类型是整数,但查询值是字符串。例如,表中的 id
列是整数类型,而查询语句是 WHERE id = '1'
,而不是 WHERE id = 1
,这种情况下可能不走索引。
2. 对索引列进行函数操作或表达式计算
比如,WHERE DATE(create_time) = '2024-07-15'
,而不是 WHERE create_time = '2024-07-15'
,对索引列 create_time
进行了函数 DATE()
操作,可能导致无法使用索引。
3. 模糊查询中以通配符开头
像 LIKE '%value'
这样以 %
开头的模糊查询,通常无法使用索引。但 LIKE 'value%'
这种以具体值开头的模糊查询可能会使用索引。
4. 索引列上存在大量重复值
如果索引列中的数据重复性很高,比如性别列只有 男
和 女
两种值,此时使用索引的效果可能不明显,MySQL 可能会选择全表扫描。
5. 表数据量小
当表中的数据量非常小时,MySQL 优化器可能会认为全表扫描比使用索引更快。
6. 条件中 OR 连接的多个条件中只有部分列有索引
例如,表中有 id
和 name
列,分别有索引,但查询语句是 WHERE id = 1 OR name = 'John'
,可能不会使用索引。
7. 违反最左前缀原则
对于复合索引,如果查询条件没有遵循最左前缀原则,可能无法使用索引。例如,索引是 (col1, col2, col3)
,而查询条件是 WHERE col3 = 'value'
,就不会使用索引。
8. 隐式类型转换
当查询条件中的值与表中列的类型不匹配,导致隐式类型转换时,可能不会使用索引。