SQL调优笔记

如何定位并优化慢查询sql

具体场景需要具体分析,主要思路如下

  • 根据慢日志定位慢sql
  • 使用explain工具分析sql
  • 修改sql尽量让SQL走索引

Mysql操作过程
使用语句SHOW VARIABLES LIKE '%quer%'查看数据库参数
在这里插入图片描述
根据SHOW STATUS LIKE '%slow_queries%' 查看系统 状态中慢查询的数量(只是本次会话的慢sql条数)
在这里插入图片描述

  • 将慢查询日志开关打开(该操作和下面一条操作才重启mysql后会失效,如果想永久保存需要到数据库配置文件中修改)
SET GLOBAL slow_query_log = ON;
  • 将慢日志设定时间设为1s(需要)
SET GLOBAL long_query_time = 1;
  • 创建一个慢查询
    在这里插入图片描述
  • 进入慢日志查看
    在这里插入图片描述
  • 使用explain分析
    在这里插入图片描述
  • 优化
    修改sql语句,让sql语句走索引(在account上建有索引)
    在这里插入图片描述
    在这里插入图片描述
    若必须使用name字段name可以在name上建立索引
    在这里插入图片描述
  • 问题:统计会走那个索引呢
 select account(id) from_info_large 

在这里插入图片描述
通过explain可以发现走的是account而不是id,因为mysql默认会使用查询优化器进行优化。至于为什么选择account作为索引呢?是因为在进行统计和遍历的时候mysql会利用b+ -tree叶子节点之间的连接进行遍历叶子节点(不会从上到下遍历b+数),而id为主键主键上建有聚集索引,每个叶子节点中不但有键值信息还有该行中每一列的信息,这样将导致查询变慢。account上的索引为稀疏索引,只保留键值的信息,信息量较少,查询更快。
当然mysql的查询优化器有时候并不是完全的正确,这时我们就需要强制使用我们自己想要使用的key作为索引
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值