SQL查询索引失效之谜

1、使用!= 或者 <> 

SELECT * FROM user WHERE name != 'andrew';

2、字段类型不同

3、索引列使用函数

如:

SELECT * FROM user WHERE DATE(create_at) = '2020-09-03';

如果使用函数在索引列,这是不走索引的。

4、索引列使用运算符

SELECT * FROM user WHERE age - 1 = 20;

如果你对列进行了(+,-,*,/,!), 那么都将不会走索引。

5、使用OR关键字

SELECT * FROM user WHERE name = 'andrew' OR age= 28;

OR导致索引是在特定情况下的,并不是所有的OR都是使索引失效,如果OR连接的是同一个字段,那么索引不会失效,反之索引失效。

6、Like 左匹配

SELECT * FROM user WHERE name LIKE '%里程';

当 % 放在匹配字段前是不走索引的,放在后面才会走索引。

7、NOT IN、NOT EXISTS导致索引失效

8、使用 *(星)查询

SELECT * FROM user

9、不满足最左匹配原则

 该索引字段的顺序是:name、age、code

SELECT * FROM USER WHERE code=1 AND age=12

如果在使用组合索引时,没注意最左前缀原则,导致索引失效。

为了测试方便查询时使用的 *(星),在《阿里巴巴开发手册》中有明确规定,查询sql中禁止使用select * 。使用 *(星)查询,走的是全表扫描,没有用到任何索引,查询效率是非常低的。

你可能感兴趣的:(#,MySQL,sql,数据库)