mysql慢查询优化

前言

在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多 SQL 语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的 SQL 就是整个系统性能的瓶颈。


提示:以下是本篇文章正文内容,下面案例可供参考

一、sql语句执行顺序

  • FROM(form)
    先确定从哪个表中取数据,所以最先执行from tab。存在多表连接,from tab1,tab2。可以对表加别名,方便后面的引用。

  • ON(on)

    连接多张表的附加条件

  • JOIN(join)

    连接多张表的关键字

  • WHERE(where)
    where语句是对条件加以限定,如果没有需要限定的,那就写成where 1=1,表示总为true,无附加条件。

  • GROUP BY(group by)
    分组语句,比如按照员工姓名分组,要就行分组的字段,必须出现在select中,否则就会报错

  • 聚合函数

    常用的聚合函数有max(),min(), count(),sum(),聚合函数的执行在group by之后,having之前。如果在where中写聚合函数,就会出错

  • HAVING(having)
    having是和group by配合使用的,用来作条件限定

  • SELECT(select)

    选出要查找的字段,如果全选可以select *

  • DISTINCT(distinct)
    去除数据中重复内容

  • ORDER BY(order by)
    排序语句,**默认为升序(asc)**排列。如果要降序排列,就写成order by [XX] desc。order by语句在最后执行,只有select选出要查找的字段,才能进行排序

  • LIMIT(limit)
    分页关键字

二、sql优化手段

1.explain 分析SQL的执行计划

EXPLAIN是MySQl必不可少的一个分析工具,主要用来测试sql语句的性能及对sql语句的优化,或者说模拟优化器执行SQL语句。在select语句之前增加explain关键字,执行后MySQL就会返回执行计划的信息,而不是执行sql

  • 需要重点关注 type、rows、extra。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FOSdRjXz-1650004751129)(D:JAVAjavabasic81博客imgimage-20220414112811348.png)]

  • type由上至下,效率越来越高
    • ALL 全表扫描
    • index 索引全扫描
    • range 索引范围扫描,常用语<,<=,>=,between,in 等操作
    • ref 使用非唯一索引扫描或唯一索引前缀扫描,返回单条记录,常出现在关联查询中
    • eq_ref 类似 ref,区别在于使用的是唯一索引,使用主键的关联查询
    • const/system 单条记录,系统会把匹配行中的其他列作为常数处理,如主键或唯一索引查询
    • null MySQL 不访问任何表或索引,直接返回结果
    • 虽然上至下,效率越来越高,但是根据 cost 模型,假设有两个索引 idx1(a, b, c),idx2(a, c),SQL 为"select * from t where a = 1 and b in (1, 2) order by c";如果走 idx1,那么是 type 为 range,如果走 idx2,那么 type 是 ref
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值