qidao123.com技术社区-IT企服评测·应用市场

标题: 定位SQL慢查询 [打印本页]

作者: 泉缘泉    时间: 2023-10-26 22:39
标题: 定位SQL慢查询
一、概念

二、在数据库中设置SQL慢查询

​                explain的参数:
[table][tr]输出字段含义[/tr][tr][td]id[/td][td]执行编号,标志select所属的行。如果在语句中没有子查询或关联查询,只有唯一的select,每行都将显示1。否则内层的select语句一般会顺序编号,在嵌套查询中id越大的语句越先执行。[/td][/tr][tr][td]select_type[/td][td]显示本行是简单或复杂select。
simple:简单子查询,不包含子查询和union
primary:包含union或者子查询,最外层的部分标记为primary
subquery:一般子查询中的子查询被标记为subquery,也就是子查询中第一个select语句
derived:派生表--该临时表是从子查询中派生出来的,也就是位于select列表中的查询
union:位于union中第二个及其以后的子查询被标记为union,第一个就被标记为primary如果是位于from中则标记为derived
union result:用来从匿名临时表里检索结果的select被标记为union result
dependent union:顾名思义,首先需要满足union的条件,及union中第二个以及后面的select语句,同时该语句依赖外部的查询
dependent subquery: 子查询中第一个select语句,且该语句依赖外部的查询[/td][/tr][tr][td]table[/td][td]对应行正在访问哪一个表,表名或者别名。
·关联查询优化器会为查询选择关联顺序,左侧深度优先
·当form中有子查询的时候,表名是derivedN的形式,N指向子查询,也就是explain结果中的下一列
·当有union result的时候,表名是union 1,2等的形式,1,2表示参与uion的query id[/td][/tr][tr][td]type[/td][td]访问类型,是较为重要的一个指标,结果值从好到坏依次是:
system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL,一般来说,得保证查询至少达到range级别,最好能达到ref
访问类型详解:
ALL:最坏的情况,全表扫描
index:和全表扫描一样。只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序,但是开销仍然非常大。如在Extra列看到Using index,说明正在使用覆盖索引,只扫描索引的数据,它比按索引次序全表扫描的开销要小很多
range:范围扫描,一个有限制的索引扫描。key列显示使用了哪个索引。当使用=、、>、>=、 show processlist\G``*************************** 10. row ***************************`   `Id: 7651833`   `User: one`   `Host: 192.168.1.251:52154`   `db: ops`   `Command: Query`   `Time: 3`  `State: User sleep`  `Info: select sleep(10)``......``10 rows in set (0.00 sec)`[/code]Time表示执行时间,Info表示SQL语句。

参考资料:https://zhuanlan.zhihu.com/p/149338523#:~:text=MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。,具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。 long_query_time的默认值为10,意思是记录运行10秒以上的语句。
https://www.jianshu.com/p/7c9e2c479c15

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4