ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql索引失效的条件

2021-01-18 23:29:19  阅读:226  来源: 互联网

标签:name 索引 user Mysql 失效 where id select


1、以%开头的模糊查询,如:

select id from user where name like '%白';

2、where语句中使用不等于( != 或 <> )

select id from user where name != '张三';
select id from user where name <> '张三';

3、where语句中使用or,or跟随的条件必须加上索引,否则索引失效

#此时name和age字段必须都有索引
select id from user where name like '张%' or age = 18;

4、where语句中使用函数

select id from user where datediff(start, end) = 1;
#DATEDIFF日期函数,该函数返回前一个日期减去后一个日期的差值

5、where语句中对字段表达式计算操作

select id from user where age * 2 = 20;

6、查询条件为字符串类型,未使用引号

select id from user where name = 10086; #失效
select id from user where name = '10086';

7、where语句中使用Not In

select id from user where age not in (select age from user where money < 1000);

8、组合索引时,未遵循最左原则

  最左前缀原则:顾名思义是最左优先,以最左边的为起点任何连续的索引都能匹配上。

(1)如果第一个字段是范围查询需要单独建一个索引;

(2)在创建组合索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边;

当创建(a,b,c)组合索引时,想要索引生效的话,只能使用 a、ab、abc、ac四种组合!

实例:以下是常见的几个查询:

SELECT `a`,`b`,`c` FROM A WHERE `a`='a1' ; //索引生效
SELECT `a`,`b`,`c` FROM A WHERE `b`='b2' AND `c`='c2'; //索引失效
SELECT `a`,`b`,`c` FROM A WHERE `a`='a3' AND `c`='c3'; //索引生效,实际上值使用了索引a

标签:name,索引,user,Mysql,失效,where,id,select
来源: https://blog.csdn.net/qq_42804736/article/details/112797002

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有