【享学MySQL】慢查询分析与排查

mysql进阶-查询优化-慢查询日志 日志对一个程序来说非常重要,他能帮助程序员在系统出现问题时快速定位问题,慢查询日志(`slow query log`)是MySQL自带的几种日志文件中非常重要的一种日志(另还有错误日志、查询日志、二进制日志)。 阅读详情

引言

这篇文章主要是站在老司机的肩膀上从原理总结、MySQL慢查询优化方法、case案例分析等几个方面结合自己这段时间在工作上遇到的慢查询谈谈数据库索引的原理和如何优化慢查询。一方面给自己总结,另一方面希望和大家共同学习进步。

1 原理回顾

这部分我主要想总结一下数据库索引的原理,可能是老生常谈的东西了,慢查询这个词主要的重点就是慢,就像我们开车一样,我们发车前最重要的就是了解这部车,而我们要知道我们的SQL语句为什么会慢,我们当然必须对数据的查找过程有所了解。

1.1 磁盘IO

举个例子。其实对于数据索引这样的例子,在我们日常生活其实也是很多,通常大家都举查字典的例子吧?为了新鲜感,我换一个,比如你找对象,如果你是男的,你最先的目标是女孩子的吧(除个别外),这样我们就排除了一部无效数据,然后咱们再选咱们同一个城市的吧?又剔除了一部分无效数据,最后我们再选年龄等,最后留下了我们目标人群。这种查找过程其实也是一种索引过程。

磁盘IO。我们计算机是怎么查询数据的呢?当计算机把数据保存在磁盘上,而为了提高性能,每次又可以把部分数据读入内存来计算,因为我们知道访问磁盘的成本大概是访问内存的十万倍左右,所以简单的搜索树难以满足复杂的应用场景。考虑到磁盘IO是非常高昂的操作,计算机操作系统做了一些优化,当一次IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内,因为局部预读性原理告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到。每一次IO读取的数据我们称之为一页(page)。具体一页有多大数据跟操作系统有关,一般为4k或8k,也就是我们读取一页内的数据时候,实际上才发生了一次IO,所以结合我们的例子以及计算机查询数据的原理,为了提高查询数据的查询速度,需要保证最小的IO次数,B+树的数据结构应运而生。

1.2 索引结构

在这里插入图片描述

如上图,是一颗b+树,关于b+树的定义可以参见B+树,这里只说一些重点,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99。非叶子节点只不存储真实的数据,只存储指引搜索方向的数据项,如17、35并不真实存在于数据表中。
如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计三次IO。真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。
1.通过上面的分析,我们知道IO次数取决于b+数的高度h,假设当前数据表的数据为N,每个磁盘块的数据项的数量是m,则有h=㏒(m+1)N,当数据量N一定的情况下,m越大,h越小;而m = 磁盘块的大小 / 数据项的大小,磁盘块的大小也就是一个数据页的大小,是固定的,如果数据项占的空间越小,数据项的数量越多,树的高度越低。这就是为什么每个数据项,即索引字段要尽量的小,比如int占4字节,要比bigint8字节少一半。这也是为什么b+树要求把真实的数据放到叶子节点而不是内层节点,一旦放到内层节点,磁盘块的数据项会大幅度下降,导致树增高。当数据项等于1时将会退化成线性表。
2.当b+树的数据项是复合的数据结构,比如(name,age,sex)的时候,b+数是按照从左到右的顺序来建立搜索树的,比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,b+树就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询。比如当(张三,F)这样的数据来检索时,b+树可以用name来指定搜索方向,但下一个字段age的缺失,所以只能把名字等于张三的数据都找到,然后再匹配性别是F的数据了, 这个是非常重要的性质,即索引的最左匹配特性。

2 慢查询优化

从上面的原理我们可以知道,我们其实要做的就是让数据库在查找数据时,尽可能地选择最短的路径查找到想要的数据,尽可能地减少磁盘IO次数。

2.1索引的一些概念

  • 索引概念(重要)

    排好序的快速查找的数据结构(我们平时说的索引,如果没有特别指明,都是指B树,其中聚集索引、次要索引、覆盖索引、复合索引、前缀索引、唯一索引默认使用的都是B+树索引,除B+树这种类型的索引外还有哈希索引等)

  • 优缺点---->何种情况建索引

    1、优点
    查找 :提高数据检索效率,降低IO成本。

    排序:通过索引对数据进行排序,降低排序成本,降低cpu消耗

    2、缺点

    实际上索引也是一张表,该表保存了主键与索引字段,并指向索引的记录,所以索引列也需要占空间。

    更新表时(insert、update、delete)不仅要保存数据还要更新保存索引文件新添加的索引列。

  • 索引分类

    1、单值索引(单列索引):一个索引只包含单个列,一个表中可以有多个单列索引。

    2、唯一索引:索引列必须唯一,但可以允许有空值

    3、联合索引:一个索引包含多个列

  • MySQL索引结构

    1、BTree索引

    2、Hash索引

    3、full-text全文检索

    4、R-Tree索引

2.2 适合创建索引和不适合创建索引的情况

  • 哪些情况要建索引

    1、主键自动建主键索引

    2、频繁作为查询条件的字段应该创建索引

    3、查询中与其他表关联的字段,外键关系建立索引

    4、在高并发下倾向建立组合索引

    5、查询中的排序字段,排序字段若通过索引去访问将大大提高排序速度

    6、查询中统计或者分组的数据

  • 哪些情况不适合建索引

    1、频繁更新的字段

    2、where条件用不到的字段不创建索引

    3、表记录太少

    4、经常增删改的表

    5、数据重复太多的字段,为它建索引意义不大(假如一个表有10万,有一个字段只有T和F两种值,每个值的分布概率大约只有50%,那么对这个字段的建索引一般不会提高查询效率,索引的选择性是指索引列的不同值数据与表中索引记录的比,,如果,一个表中有2000条记录,表中索引列的不同值记录有1980个,这个索引的选择性为1980/2000=0.99,如果索引项越接近1,这个索引效率越高)

3. 原理分析(explain字段分析)

  • id:表示select子句或者操作的顺序

    1、id相同:执行顺序自上而下

    2、id不同:id值越大优先级越高,越先被执行

    3、id相同不同:id越大越先执行,相同的自上而下执行

  • select_type:主要是区分普通查询、联合查询、子查询等。

    SIMPLE:简单的select查询,不包含子查询与union

    PRIMARY:查询中包含复杂的子部分,最外层会被标记为primary

    SUBQUERY:在select或者where列表中包含了子查询

    DERIVED:在from列表中包含的子查询衍生表

    UNION:若第二个select出现在union之后,则被标记为union

    UNION RESESULT:从union表获取结果的select

  • table:这一行数据是哪个表的数据

  • type:查询中使用了何种类型(优化程度参考)

    结果值从最好到最坏:system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>all,一般来说,得保证查询至少达到range级别,最好能到达ref

    system:表只有一行记录(等于系统表),这是const类型的特例,平时不会出现

    const:表示通过索引一次就能够找到

    eq_ref:唯一性索引扫描,对于每个索引键,表示只有一条记录与之匹配,常见于主键或唯一索引扫描

    ref:非唯一性索引扫描,返回匹配某个单独值的所有行

    range:只检索给定范围的行,使用一个索引来选择行,一般就是在where语句中出现了between、<、>、in等的查询

    index:index比all快,因为index是从索引中读取,all是从硬盘中读取

    all:遍历全表才能找到

  • possible_key:显示可能应用在这张表中的索引,但实际上不一定用到

  • key:实际上使用的索引,如果没有则为null

  • key_len:表示索引中使用的字节数(可能使用的,不是实际的),可通过该列查询中使用的索引的长度,在不损失精确性的情况下,长度越短越好

  • ref:显示索引的哪一列被用到,如果可能的话是一个常数,哪些常量被用于查找索引列上的值

  • rows:大致估算找出所需的记录要读取的行数

  • Extra:包含不适合在其他列中显示,但十分重要的的额外信息

    1、Using filesort 说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取,mysql中无法利用索引完成的排序成为“文件排序”

    2、Using temporary 使了用临时表保存中间结果,mysql在对查询结果排序时使用了临时表,常见于排序order by 和分组查询group by

    3、Using index 表示相应的select操作中使用了覆盖索引,避免访问了表的数据行,效率高,如果同时出现了using where 表明索引被用来执行索引键值查找,如果没有出现 using where 表明索引用来读取而非执行查询动作。

    4、Using where 表明使用了where进行过滤

    5、Using join buffer 使用了连接缓存

    6、impossible where where子句的值总是false,不能用来获取任何元组

    7、select table optimized away 在没有group by子句的情况下,基于索引优化min/max操作或者对于myisam存储引擎优化count(*)操作,不必等到执行阶段再进行计算

    8、distinct:在优化distinct操作,在找到第一匹配的元组后即停止找到同样值的动作

3.1 索引失效_复合索引(避免)

1、应该尽量全值匹配

2、复合最佳左前缀法则(第一个索引不能掉,中间不能断开)

3、不在索引列上做任何操作(计算、函数、类型转换)会导致索引失效而转向全表扫描

4、储存引擎不能使用索引中范围条件右边的列

5、尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select*

6、mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描

7、is null,is not null也会无法使用索引

8、like以通配符开头

9、字符串不加单引号

10、少用or(可以用union all优化)

3.2 order by优化

1、避免filesort

2、尽量在索引上进行排序,遵照最佳左前缀原则

3、filesort有两种排序:

  • 双路排序:两次磁盘扫描

  • 单路排序:一次性读取保存在内存中,没拉完的数据再次拉

  • 单路排序是后出的,总体好于双路排序

  • 优化策略:1、增大sort_buffer_size参数的设置;2、增大max_length_for_sort_data参数的设置

原因:尽可能一次拿到内存

4.真实Case Study

4.1 join慢查询

  慢查询压垮了DB,了确认刚刚上线的效果,李某通过命令行连上db502执行了两条慢查询SQL,发现sql写错后执行中断操作,但是客户端与数据库突然断开连接,李某并未注意到。由于用户JAVA服务暂时没有数据库重连机制,影响到约三分之一的需要获取用户信息的JAVA服务接口。

李某执行的sql语句如下:

代码块

select * from useracct join userinfo order by useracct.id desc limit 11;
select * from useracct join userinfo where useracct.id > 116277616 order by useracct.id desc limit 11;

对第一条sql进行explain可以发现,因为忘写了join的on条件,这是扫全表sql,如下图:

在这里插入图片描述

我们首先看type级别两个表的级别都是ALL,说明该条语句没有用到索引,做了全表扫描是最差的情况,

4.2 order by慢查询

该案例中的慢查询语句:

SELECT *  FROM `coupon_userid_61` FORCE INDEX (`orderid`)  WHERE `userid` = 91241561 AND `status` IN (0,144) ORDER BY `id` ASC ;

该SQL由于强制指定了使用orderid索引,但条件中并没有orderid,导致产生全表扫描(type: ALL);如下为问题SQL和正确SQL的执行计划:

mysql> explain SELECT *  FROM `coupon_userid_61` FORCE INDEX (`orderid`)  WHERE `userid` = 91241561 AND `status` IN (0,144) ORDER BY `id` ASC ;

mysql> explain SELECT *  FROM `coupon_userid_61` FORCE INDEX (`orderid`)  WHERE `userid` = 91241561 AND `status` IN (0,144) and orderid=1 ORDER BY `id` ASC ; 

直接原因是最终传给SQL查询函数的参数,orderid没有加入where子句,但forceindex一直生效

4.3 出现using filesort

在这里插入图片描述

通过执行计划可以看出,用到了主键索引以及SpuType索引,该语句先使用了sputype索引,而该字段数据大部分数据都一样,导致出现了using filesort,解决这个问题有两种解决方案:

1、可以强制使用主键索引
在这里插入图片描述
2、强制不使用sputype索引
在这里插入图片描述

点点关注,不会迷路

MySQL 慢查询日志开启与问题排查指南 然而,在实际使用中,可能会遇到一些意外情况,比如执行时间很短的查询也被记录到慢查询日志中。慢查询日志是 MySQL 提供的一种日志功能,用于记录执行时间超过指定阈值的 SQL 语句。通过分析这些慢查询,我们可以发现潜在的性能瓶颈,并采取相应的优化措施。通过本文的指南,您可以轻松开启慢查询日志,并解决常见问题。如果启用了该选项,MySQL 会记录所有未使用索引的查询,即使它们的执行时间很短。设置得非常低(例如 0.001 秒),即使是执行时间很短的查询也会被记录。)可能会被记录,即使它们的执行时间很短。 阅读详情

相关推荐

mysql慢sql排查与分析

慢查询日志的排查与分析

ZYNORL的博客 2252

mysql left join 查询慢的问题排查

然后对这个查询查看执行计划,看到 quality_xxx 是全表扫描,虽然比较怀疑,这么小的数据量不会导致这么大的差异,但是还是给 quality_xxx 的 关联字段 vehicle_no 加上了索引。发现 vehicle 的 union 表 和 quality_xxx 使用 left join关联时执行很慢(5s左右),但是两个字查询分别查询时,执行很快(小于1s),两个表的数据量都不是很大,一个7k , 一个不到5W。整体sql写完之后,发现执行需要5s左右,然后单独对 子查询进行查询,执行都很快。

tianjiliuhen的博客 5621

MySQL慢查询优化、日志收集定位排查、慢查询sql分析

MySQL慢查询日志收集、定位,慢查询分析、排查。如果返回值是'OFF',你需要开启它。默认情况下,超过10秒的查询会被记录为慢查询。默认情况下,只有不使用索引的查询才会被记录。等待一段时间后,可以查看`/path/to/your/logfile.log`来定位慢查询。你可以手动查看日志,或者使用工具如`mysqldumpslow`来帮助分析日志内容。在定位到具体的慢查询后,可以使用`EXPLAIN`语句来进一步分析查询执行计划,并基于此进行优化。慢查询日志可能会很大,所以定期轮转和清理是很有必要的。

自己选择的路,跪着也要走完 770

Mysql 调优记: INNER JOIN查询 Using temporary; Using filesort 问题优化

近期笔者在生产环境中发现一条执行非常慢的sql。大概时间为5s左右,于是乎对改SQL场景进行EXPLAIN 分析,发现一个在执行过程中出现对“Using temporary; Using filesort ”。即在执行过程中产生了临时表来存储结果,并在排序时根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序。经过合理对优化,最终EXPLAIN后,没有再发现明细对SQL性能瓶颈,并且SQL...

不能说的秘密的博客 1万+

【mysql】mysql调优时必须掌握的慢查询语句排查命令

文章目录前言:开启并设置慢查询语句的时间1. 查看是否开启慢查询语句2. 开启慢查询3. 修改满查询定义的时间4. 开启 记录没有使用索引的查询5. 查询有多少慢查询记录分析工具 前言: mysql慢查询日志用来记录mysql在相应时间内超过阈值的语句。 阈值定义在long_query_time里。 mysql> show variables like '%long_query_time%'; +-----------------+-----------+ | Variable_name | V

互联网老辛 5939

Simplorer-Maxwell联合仿真速度太慢?我用这3个技巧把仿真时间砍半(附SVPWM周期与步长设置避坑)

本文详细介绍了Simplorer-Maxwell联合仿真性能优化的3个关键技巧,包括仿真步长与周期的科学配置、基于任务调度的加速技术以及模型简化与精度平衡。特别针对SVPWM参数设置提供了避坑指南,帮助工程师在不牺牲精度的情况下将仿真时间缩短50%以上,适用于电机驱动系统开发等场景。

weixin_29189381的博客 466

MySQL慢查询及解决方案

MySQL慢查询与索引的关系,以及慢查询问题解决的方案

程序大视界 7922

数学建模--十大经典常用算法

数学建模十大算法:灰色预测,蒙特卡洛,遗传算法,模拟退火法,组合算法,神经网络,动态规划,聚类算法,类比法,概率算法,Floyd算法

qq_51533426的博客 5647

mysql查询缓慢原因和解决方案

查询速度慢的原因很多,常见如下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。 9、返回了不必要的行和列 10、查询语句不好,没有优化 可以通过如下方法来优化查询 : 1、把数据

忘川 1万+

代码生成 | 安时积分法模型搭建

安时积分法是电池电量计量最基础的方法,今天我们用simulink建模的方式做一个安时积分模型,从而更好地理解安时积分的思想也掌握建模的基础操 ​新建文件 打开MATLAB启动simulink新建一个模型文件 定义变量 和手写代码一样,先定义几个后面要用到的变量,在simulink建模时新建变量用Data Store Memory模块。双击填入要定义的变量名,然后在signal attributes赋初值 如此方法新建四个变量current(电流)初值1000mA、tatol_cap(总容量

ningvay的博客 1万+

从立创商城到Cadence:手把手教你实现封装格式的精准迁移

本文详细介绍了如何从立创商城获取元器件封装并精准迁移至Cadence Allegro的全流程。通过实战案例MAX31865ATP+T芯片,逐步解析Altium Designer格式转换、Cadence环境配置、封装导入验证等关键步骤,提供常见问题解决方案和效率提升技巧,帮助硬件工程师实现封装格式的高效迁移。

weixin_42519985的博客 216

MySQL性能优化:深入分析慢查询的排查与解决

本文深入探讨MySQL慢查询问题的排查与优化过程,涵盖慢查询日志分析、执行计划优化、系统性能瓶颈排查及数据库配置调整,帮助提高查询效率并提升数据库性能。

专注分享编程开发与技术进阶干货! 3306

WinCC与施耐德PLC的Modbus TCP通信实战指南

本文详细解析了西门子WinCC与施耐德PLC通过Modbus TCP协议实现通信的完整实战流程。内容涵盖硬件网络配置、Modbus地址映射核心规则、WinCC驱动连接建立、变量创建及高级数据访问技巧,并提供了常见故障排查思路,帮助工程师高效解决跨品牌设备通信难题。

weixin_29194693的博客 1001

mysql慢查询

1 概念 MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。 具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。 long_query_time的默认值为10,意思是记录运行10秒以上的语句。 默认情况下,MySQL数据库并不启动慢查询日志,需要手动来设置这个参数。 当然,如果...

八点半技术站 7万+

智能车实战——从ADC采集到PWM控制,让电磁车精准循迹

本文详细介绍了电磁循迹智能车的实现原理与实战技巧,涵盖从ADC信号采集、PWM控制到PID算法整定的全流程。通过STM32代码示例解析电感信号处理、差比和偏差计算及电机驱动等关键技术,帮助开发者快速掌握智能车精准循迹的核心方法,提升电磁车竞赛项目的开发效率。

weixin_29192211的博客 301

手把手教你学simulink(36.1)--ACAC变换器场景示例:基于 Simulink 的矩阵变换器(Matrix Converter)

矩阵变换器(Matrix Converter, MC)是一种直接将交流电(AC)转换为不同频率和幅值的交流电的电力电子设备。与传统的基于直流环节的变频器不同,矩阵变换器不需要中间的直流环节,而是通过双向开关直接在输入和输出之间进行能量传递。这种结构使得矩阵变换器具有更高的效率、更小的体积和更好的动态响应。在本项目中,我们将使用 MATLAB/Simulink 来建模和仿真一个矩阵变换器,并分析其性能。Simulink 是一个强大的仿真工具,特别适合用于电力电子系统的建模和仿真。

MHD0815的博客 1066

Mysql之慢查询的排查及其优化

我们查询比较慢的sql我们一定要将其记录下来 记录我们执行的sql 这样们在排查的时候才可以记录下来,那么我们可以打开我们的mysql慢查询日志,在这个日志里会记录下我们慢查询的sql 当然这个慢查询日志中的慢查询是有限定时间的,我们可以更改限定时间找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。

qq_48508278的博客 6808

【零基础学习CAPL】——弹窗信息提示

不用手动制作Panel窗口,直接使用CAPL脚本实现弹窗提示。//没有wait超时,等待测试人员确认//有wait超时,对话框在超时后自动终止//有wait超时,可以显示一个资源,即对话框可以显示额外的信息。/*参数说明text:显示在弹窗中的内容,长度限制在4096字符timeout:弹窗自动结束的时间,单位:ms。若为0,则无超时控制heading:对话框文本上方的标题。字符串最大长度限制在256个字符。resource:URL或文件路径。字符串的最大长度是有限的(512个字符)。

LOVE135149的博客 264

如何排查mysql慢查询?

通过 information_schema.INNODB_TRX 和 sys.innodb_lock_waits 视图查看锁等待详情。performance_schema 提供了更细粒度的等待事件监控,适合分析实时和历史等待事件。通过以上方法,可以系统性地定位和解决线上慢查询问题,同时通过预防措施避免未来性能隐患。SHOW PROCESSLIST 可以查看当前所有连接的状态,包括等待中的查询。排查线上慢查询是数据库性能优化的关键步骤。对可疑 SQL 执行。

wamp0001的博客 1721

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

mysql慢查询排查步骤

Using index:查询的列被索引覆盖,并且 where 筛选条件是索引列之一,但不是索引的前导列或出现了其他影响直接使用索引的情况(如存在范围筛选条件等),Extra 中为 Using where;这里我们利用到了覆盖索引+延迟关联查询,相当于先只查询 id 列,利用覆盖索引快速查到该页的 10 条数据 id,然后再把返回的 10 条 id 拿到表中通过主键索引二次查询。Using index:查询的列被索引覆盖,并且 where 筛选条件是索引的是前导列,Extra 中为 Using index。

weixin_40827281的博客 3830

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

面试题 MySQL的慢查询、如何监控、如何排查?

1. 慢查询和慢查询日志 慢查询,顾名思义就是很慢的查询。MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10s。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志或多或少会带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将

燕然一勒的博客 7775

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MYSQL 慢查询和慢查询日志

慢查询和慢查询日志是数据库性能优化中重要的工具。通过记录慢查询,我们能够快速定位性能问题、优化查询语句,提高系统的响应速度和稳定性。在使用慢查询日志时,合理配置日志参数、使用专业工具进行分析,并结合系统性能监控,能够更好地发现和解决潜在的性能瓶颈,确保数据库系统的高效运。

wangxuanyang_zer的博客 1755

MySQL慢查询,一口从天而降的锅!

一条慢查询会造成什么后果?年轻时,我一直觉得不就是返回数据会慢一些么,用户体验变差?其实远远不止,我经历过几次`线上事故`,有一次就是由一条SQL慢查询导致的。

陈哈哈的菜园子 2万+

MySQL数据库慢查询问题排查方法

最近碰到了几次数据库响应变慢的问题,整理了一下处理的流程和分析思路,执行脚本。希望对其他人有帮助。 MySQL慢查询表现 明显感觉到大部分的应用功能都变慢,但也不是完全不能工作,等待比较长的时间还是有响应的。但是整个系统看起来就非常的卡。 查询慢查询数量 一般来说一个正常运行的MySQL服务器,每分钟的慢查询在个位数是正常的,偶尔飙升到两位数也不是不能接受,接近100系统可能就有问题了,但是还能勉...

意言堂-技术管理杂谈 9953

[mysql] 慢查询日志排查优化

MySQL慢查询的排查定位与优化方法

君昭 1152
上一篇: 商业计算怎样才能保证精度并防止溢出
下一篇: 【Java基础】Java8新特性(一):lambda表达式及使用
少侠露飞
博客等级 码龄9年 214粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值