文章目录

  • 令人头大的慢查询分析
    • 前言
    • explain命名使用方法
    • 索引失效情况
    • 慢查询分析
    • 参考文章

令人头大的慢查询分析

前言

建表语句

create table student(`id`  BIGINT(20)  NOT NULL AUTO_INCREMENT,`name` VARCHAR(50) NOT NULL,`age`  INT(11)    NOT NULL,`height` INT(11) NOT NULL,PRIMARY KEY (`id`),KEY `name_index` (`name`),KEY `multi_index` (`age`,`height`)
);

explain命名使用方法

explain命令,主要可以对select语句进行分析,并输出select执行的详细信息,以供开发人员针对性优化。explian的使用十分简单,在select语句前面加上explain关键字即可,如下图,其中order_id是主键

输出的各个属性含义

id select 查询的标识符,是唯一的
select_type select查询类型
table 查询指定的表
partitions 匹配的分区
type 访问类型,ALL指的是全表扫描
possible_keys 查询中可能使用的索引
key 查询中确切使用到的索引
ref 哪个字段或常数与 key 一起被使用
rows 显示此查询一共扫描的行数,是一个估计值.
filtered 查询条件所过滤的数据的百分比
extra 额外信息

索引失效情况

  • 最佳左前缀法则

    如果索引是复合索引,要遵循最佳左前缀法则,查询从索引的最前列开始,并且不跳过索引中的列

    下面是违反最佳左前缀法则的情况,针对复合索引(age, height), 直接根据height查询,则复合索引失效

  • 在索引上做操作(计算、函数、类型转换),均会导致索引失效

    如下图,对主键id,进行 id+1操作,会使索引失效

  • 索引字段上使用(is null, not null)判断时,会使索引失效

  • 索引字段使用like以通配符%开头时,会导致索引失效

  • 索引字段中使用or

慢查询分析

msql通过指定long_query_time参数,设置慢查询的时间阈值,一旦查询语句的执行时间超过此参数,其就会被系统记录到慢查询日志中。通过对慢查询日志进行分析,可以对相应的慢查询语句或者数据库进行优化,从而提升数据库性能。下面详细讲述几种造成慢查询的原因和优化手段。

  • 上文提到的索引失效

  • limit分页语句偏移量过大

    limit语句的查询时间与偏移量成正比,所以一旦偏移量过大会造成查询速度巨慢

    使用子查询优化

    原查询语句

    select * from student limit 200000, 20;

    优化后查询语句(id是主键索引)

    select * from student where id >=(select id from student limit 200000, 1) limit 20;

  • 数据库在刷脏页

    数据库的每一次修改(插入、删除、更新)操作,都会记录在redo log日志,redo log日志一般不会直接刷新到磁盘中,而是保存在缓冲区(os buffer),等操作系统空闲的时候,刷新进磁盘。但是缓冲区容量是有限的,如果数据库更新过于频繁,导致缓冲区满了,就不会等系统空闲,而是直接暂停其他操作,将缓冲区刷新进磁盘中。所以此时执行查询语句就会特别慢。

  • 锁冲突

    数据库一般支持表锁,或者行锁。拿表锁举例,如果一个sql语句,获取表的写锁后,在执行更新操作,之后的查询(select)语句,需要等待表写锁释放,才能获取读锁。

    所以一旦查询语句执行涉及到的锁,被其他sql语句占有,无法获取锁,需要等待其释放锁,所以会造成查询慢。

参考文章

腾讯面试:一条SQL语句执行得很慢的原因有哪些?—不看后悔系列

令人头大的慢查询分析相关推荐

  1. 天兔(Lepus)监控系统慢查询分析平台安装配置

    转http://suifu.blog.51cto.com/9167728/1770672 被监控端要安装pt工具 1 2 3 4 [root@HE1~]## yum -y install perl-I ...

  2. mysql性能优化-慢查询分析、优化索引和配置

    目录 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_con ...

  3. 开源大数据查询分析引擎

    引言 大数据查询分析是云计算中核心问题之一,自从Google在2006年之前的几篇论文奠定云计算领域基础,尤其是GFS.Map-Reduce.Bigtable被称为云计算底层技术三大基石.GFS.Ma ...

  4. 一次PostgreSQL行估算偏差导致的慢查询分析

    本文为DBAPlus投稿文章, 原文链接: http://dbaplus.cn/news-19-1514-1.html 一次PostgreSQL行估算偏差导致的慢查询分析 问题 最近某业务系统上线了新 ...

  5. mysql 8.0 慢查询_MySQL慢查询分析

    [伍哥原创] 在我们做系统性能调优的时候,数据库的慢查询语句的优化是必不可少的,特别是电子商务类型的重度MYSQL应用类型. 下面我们一起来看看怎么做好MYSQL的慢查询分析吧. 1,开启MYSQL的 ...

  6. 开放搜索查询分析服务架构解读

    简介:搜索行为在后端都会有大量的数据计算和处理才会召回符合用户需求的搜索结果,本次分享结合自建搜索业务中查询分析服务常见的问题及难点,介绍阿里云开放搜索查询分析具备的能力及解决方案,并深度解读阿里巴巴 ...

  7. 用MySql的查询分析语法explain来优化查询和索引

    http://hi.baidu.com/wtnzone/item/beb83840a4971af4dd0f6c77 数据库最常见的操作就是查询了,我们经常要用"SELECT"语法对 ...

  8. 数据库-优化-通过执行计划查询分析SQL执行计划-每个字段的说明

    通过explain查询分析SQL的执行计划 1.使用explain查询SQL的执行计划 SQL的执行计划侧面反映出了SQL的执行效率,具体执行方式如下所示: 在执行的SQL前面加上explain关键词 ...

  9. lepus mysql 慢查询_天兔 -Lepus 慢查询分析平台配置

    想要实现慢查询查询分析,需要在被监控端安装percona-toolkit工具. 1.被监控端安装软件包 yum -y install perl-IO-Socket-SSL yum -y install ...

最新文章

  1. Linux下用 lsof 命令查找指定端口被哪个进程占用
  2. HTML学习笔记(三)样式CSS
  3. Java 寻找幸运数
  4. how to find the original page containing a given image
  5. vue从入门到精通之进阶篇(四)模块化工具 webpack
  6. python 商城_python 开源商城安装
  7. Android4.4点击无响应,webview某些超链接点击无响应的问题
  8. 3.4、云计算FusionAccess桌面运维与管理
  9. 我是如何同时在字节和微信成功拿到实习转正offer!
  10. 怎么把浏览器改成开发者模式_小米手表怎么玩?Wear OS初体验
  11. 【DM642】ICELL Interface—Cells as Algorithm Containers
  12. Oracle与MySQL的备份还原及密码修改等
  13. 游戏运营的工作中是做什么
  14. swf游戏保存进度_swf游戏
  15. 分布式 | dble 运维命令知多少
  16. python重启路由器_利用python重启路由器
  17. windows主机测评
  18. 幂等性需要明确最小颗粒度
  19. xamp:在shell中运行mysql
  20. 解决Qt5.7.0 cannot find -lGL

热门文章

  1. 热身赛T3(奖学金评定)
  2. 合同和协议的区别_合同的内容包括哪些,合同和协议的区别
  3. 苹果开发者账号(三)
  4. matlab解决推销员行程问题(可参考mathworks网站)
  5. GPA计算(5.0分制)
  6. 2022年”泰迪杯“数据分析技能赛B题:银行客户忠诚度分析
  7. springboot 对接 淘宝联盟
  8. Mac 自带php升级(5.6,7.0,7.1)
  9. 配置WebLogic Tuxedo Connector (转)
  10. Python + Excel 办公自动化 01 —— 硬菜马上就来