mysql最左匹配原则失效场景,不走索引原因和案例
时间: 2023-07-11 17:52:51 浏览: 170
MySQL最左匹配原则失效的场景包括:
1. 如果在查询条件中使用了函数或者表达式,则可能导致最左匹配失效。例如,查询语句中使用了函数或者表达式,如`SELECT * FROM users WHERE age + 10 = 35 AND name = 'John'`,这种情况下MySQL无法使用索引,因为它无法对函数或者表达式进行索引。
2. 如果在查询条件中使用了OR操作符,则可能导致最左匹配失效。例如,查询语句中使用了OR操作符,如`SELECT * FROM users WHERE name = 'John' OR age = 25`,这种情况下MySQL也无法使用索引,因为它无法同时对两个列进行索引。
3. 如果在查询条件中使用了不等于号(<>),则可能导致最左匹配失效。例如,查询语句中使用了不等于号,如`SELECT * FROM users WHERE name <> 'John' AND age = 25`,这种情况下MySQL也无法使用索引,因为它无法对不等于号进行索引。
4. 如果在查询条件中使用了LIKE操作符,并且通配符出现在左边,则可能导致最左匹配失效。例如,查询语句中使用了LIKE操作符,如`SELECT * FROM users WHERE name LIKE '%John' AND age = 25`,这种情况下MySQL也无法使用索引,因为它无法对左边的通配符进行索引。
一个不走索引的案例是,假设我们有一个名为users的表,其中包含id、name和age三列。如果我们在使用查询语句时,使用了以下条件:
```
SELECT * FROM users WHERE name='John' AND age>25;
```
如果我们在表中创建了一个包含name和age两列的联合索引,则MySQL会使用该联合索引进行匹配。但是,由于age列上使用了大于号,所以MySQL无法使用该索引,因为索引只能用于等于和小于操作。因此,MySQL不得不扫描整个表来查找匹配的行,这会导致查询性能变差。
阅读全文