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 * 。使用 *(星)查询,走的是全表扫描,没有用到任何索引,查询效率是非常低的。
标签:查询,索引,user,SQL,失效,WHERE,SELECT,之谜 From: https://blog.51cto.com/u_15856116/5813275