原创智能优化,原创度检查,一键采集,文章组合(【持续原创输出】命中索引优化规则(一)(组图))
优采云 发布时间: 2022-04-20 02:22原创智能优化,原创度检查,一键采集,文章组合(【持续原创输出】命中索引优化规则(一)(组图))
继续原创输出,点击上方蓝字关注我
前言索引优化规则1、like语句的前导模糊查询不能使用索引
select * from doc where title like '%XX'; --不能使用索引
select * from doc where title like 'XX%'; --非前导模糊查询,可以使用索引
2、union,in,或者都可以命中索引,推荐使用in
Union 可以命中索引,MySQL 消耗的 CPU 最少。
select * from doc where status=1
union all
select * from doc where status=2;
in 可以命中索引,查询优化比 union all 消耗 CPU 多,但可以忽略。一般情况下,建议使用in。
select * from doc where status in (1, 2);
或者新版本的MySQL可以命中索引,查询优化比in更消耗CPU。不建议频繁使用or。
select * from doc where status = 1 or status = 2
补充:有些地方说在where条件下使用or会使索引失效,导致全表扫描。这是一个误解:
3、否定条件查询不能使用索引
select * from doc where status != 1 and status != 2;
select * from doc where status in (0,3,4);
4、联合索引的最左前缀原则
select uid, login_time from user where login_name=? andpasswd=?
创建联合索引时,最有区别的字段在最左边
当有不等号和等号的混合判断条件时,创建索引时,等号条件的列是前置的。例如,哪里a>?和b=?,那么即使a更具辨别力,b也必须放在索引的顶部。
用最左前缀查询时,并不代表SQL语句的where顺序要与联合索引一致。
select uid, login_time from user where passwd=? andlogin_name=?
如果index(a,b,c), where a=3 and b like 'abc%' and c=4, a可以用,b可以用,c不能用。
5、索引中范围条件右边的列不能使用(范围列可以用于索引),范围列后面的列的索引无效。
<p>select * from employees.titles where emp_no