SQL优化篇 - MySQL查询select语句优化

目录

前言:

一、SQL语句优化

(一)SQL关键字执行顺序

(二)避免索引失效

索引失效会带来一些可能存在的隐患:

使用索引时,要注意避免索引失效:

(三)explain执行计划分析

二、实战操作

1. 将 find_in_set() 替换为 in

2. 将 JSON_UNQUOTE() 替换为 ->> 符号


前言:

        目前,无论是运维,开发,测试,几乎都有接触到SQL,会使用SQL,会优化SQL,还是一项很重要的技能,多一份技能,就多一份责任,工作报告也多一项描述,薪资也会慢慢往上涨,美滋滋!!!

一、SQL语句优化

(一)SQL关键字执行顺序

想要优化SQL语句,先熟悉每个关键字执行的顺序;我们可以根据顺序选择性的得到多种方案优化

执行顺序:

  1. FROM子句

  2. ON子句

  3. JOIN子句

  4. WHERE子句

  5. GROUP BY子句

  6. HAVING子句

  7. SELECT子句

  8. DISTINCT子句

  9. ORDER BY子句

  10. LIMIT子句或者TOP子句

(二)避免索引失效

索引失效会带来一些可能存在的隐患:

        1. 索引失效行锁会上升至表锁,其他需要访问该表需要等待释放,并发性会降低,可能还会发生死锁的情况

        2. 查询性能下降,索引失效必定会全表扫描,增加查询时间

使用索引时,要注意避免索引失效:

1. 复合索引:
    1)必须遵循最左缀原则是用,否则会导致索引失效  
    2)比如索引(a,b,c)  查询顺序 则是--》where a=1 and b=2 and c=3  
    3) 不要跨列或无序使用(最佳左前缀);
    4) 尽量使用全索引匹配,也就是说,你建立几个索引,就使用几个索引
    5)使用范围条件(如> < between like)之后自身和右侧的索引字段会消失

2. 不要在索引上进行任何操作(计算、函数、类型转换、操作符),否则索引失效
    1) 优化可以使用 between  等操作 

3. 索引不能使用不等于(!= <>)或is null (is not null),否则自身以及右侧所有全部失效(针对大多数情况)
    复合索引中如果有>,则自身和右侧索引全部失效。

4. 模糊查询:like不要以’%'开头,否则索引失效; 但是可以优化使用"x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值