MySQL调优三步曲(慢查询、explain profile)

C#实践项目1 需求: 在CAD内实现两个坐标系的转换。 转换方式为文件内的所有图形从一个坐标系下的坐标,转换到另一个坐标系下的坐标。 进行坐标转换后,仅仅是坐标发生改变,图层、样式等等不会发生变化。 阅读详情

mysql profile explain slow_query_log分析优化查询

在做性能测试中经常会遇到一些sql的问题,其实做性能测试这几年遇到问题最多还是数据库这块,要么就是IO高要么就是cpu高,所以对数据的优化在性能测试过程中占据着很重要的地方,下面我就介绍一些msyql性能调优过程中经常用到的三件利器:

  • 慢查询 (分析出现出问题的sql)

  • Explain (显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句)

  • Profile(查询到 SQL 会执行多少时间, 并看出 CPU/Memory 使用量, 执行过程中 Systemlock, Table lock 花多少时间等等.)

mysql的慢查询

1,配置开启
Linux:

在mysql配置文件my.cnf中增加

log-slow-queries = /var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log)

long_query_time=2 (记录超过的时间,默认为10s)

log-queries-not-using-indexes (log下来没有使用索引的query,可以根据情况决定是否开启)

log-long-format (如果设置了,所有没有使用索引的查询也将被记录)

Windows:

在 my.ini 的 [mysqld] 添加如下语句:

log-slow-queries = E:\web\mysql\log\mysqlslowquery.log

long_query_time = 2(其他参数如上)

2,查看方式
Linux:

使用mysql自带命令mysqldumpslow查看

常用命令

-s ORDER what to sort by (t, at, l, al, r, aretc), 'at’ is default

-t NUM just show the top n queries

-g PATTERN grep: only consider stmts that includethis string

eg:

s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒序 -t,是top n的意思,即为返回前面多少条的数据 -g,后边可以写一个正则匹配模式,大小写不敏感的

mysqldumpslow -s c -t 20 host-slow.log

mysqldumpslow -s r -t 20 host-slow.log

上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。

mysqldumpslow -t 10 -s t -g “left join” host-slow.log

这个是按照时间返回前10条里面含有左连接的sql语句。

explain

使用方法:

执行EXPLAIN SELECT * FROM res_user ORDER BYmodifiedtime LIMIT 0,1000 得到如下结果:

显示结果分析:

table | type | possible_keys | key |key_len | ref | rows | Extra

EXPLAIN列的解释:

  • table
    显示这一行的数据是关于哪张表的

  • type
    这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL

  • possible_keys
    显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句

  • key
    实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引

  • key_len
    使用的索引的长度。在不损失精确性的情况下,长度越短越好

  • ref
    显示索引的哪一列被使用了,如果可能的话,是一个常数

  • rows
    MYSQL认为必须检查的用来返回请求数据的行数

  • Extra
    关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢

extra列返回的描述的意义
  • Distinct
    一旦MYSQL找到了与行相联合匹配的行,就不再搜索了

  • Not exists
    MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了

  • Range checked for each
    Record(index map:#)
    没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一

  • Using filesort
    看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行

  • Using index
    列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候

  • Using temporary
    看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上

  • Where used
    使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题

不同连接类型的解释(按照效率高低的顺序排序)

  • system
    表只有一行:system表。这是const连接类型的特殊情况

  • const
    表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待

  • eq_ref
    在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用

  • ref
    这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好

  • range
    这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况

  • index
    这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)

  • ALL
    这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免

profile

我们可以先使用

mysql> SELECT @@profiling;
±------------+
| @@profiling |
±------------+
| 0 |
±------------+

1 row in set (0.00 sec)来查看是否已经启用profile,如果profilng值为0,可以通过

mysql> SET profiling = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@profiling;
±------------+
| @@profiling |
±------------+
| 1 |
±------------+

1 row in set (0.00 sec)

来启用。启用profiling之后,我们执行一条查询语句,比如:

SELECT * FROM res_user ORDER BY modifiedtimeLIMIT 0,1000

mysql> show profiles;
±---------±-----------±------------------------------------------------------------+
| Query_ID | Duration | Query |
±---------±-----------±------------------------------------------------------------+
| 1| 0.00012200 | SELECT @@profiling |
| 2| 1.54582000 | SELECT res_id FROM res_user ORDER BY modifiedtime LIMIT 0,3 |
±---------±-----------±------------------------------------------------------------+

2 rows in set (0.00 sec) 注意:Query_ID表示刚执行的查询语句

mysql> show profile for query 2;
±-------------------------------±---------+
| Status | Duration |
±-------------------------------±---------+
| starting | 0.000013 |
| checking query cache for query | 0.000035 |
| Opening tables | 0.000009 |
| System lock | 0.000002 |
| Table lock | 0.000015 |
| init | 0.000011 |
| optimizing | 0.000003 |
| statistics | 0.000006 |
| preparing | 0.000006 |
| executing | 0.000001 |
| Sorting result | 1.545565 |
| Sending data | 0.000038 |
| end | 0.000003 |
| query end | 0.000003 |
| freeing items | 0.000069 |
| storing result in query cache | 0.000004 |
| logging slow query | 0.000001 |
| logging slow query | 0.000033 |
| cleaning up | 0.000003 |
±-------------------------------±---------+

19 rows in set (0.00 sec)

结论:可以看出此条查询语句的执行过程及执行时间,总的时间约为1.545s。这时候我们再执行一次。

mysql> SELECT res_id FROM res_user ORDERBY modifiedtime LIMIT 0,3;
±--------+
| res_id |
±--------+
| 1000305 |
| 1000322 |
| 1000323 |
±--------+

3 rows in set (0.00 sec)

mysql> show profiles;
±---------±-----------±------------------------------------------------------------+
| Query_ID | Duration | Query |
±---------±-----------±------------------------------------------------------------+
| 1 | 0.00012200 | SELECT @@profiling |
| 2 | 1.54582000 | SELECT res_id FROM res_userORDER BY modifiedtime LIMIT 0,3 |
| 3 | 0.00006500 | SELECT res_id FROMres_user ORDER BY modifiedtime LIMIT 0,3 |
±---------±-----------±------------------------------------------------------------+

3 rows in set (0.00 sec)

mysql> show profile for query 3;
±-------------------------------±---------+
| Status | Duration |
±-------------------------------±---------+
| starting | 0.000013 |
| checking query cache for query | 0.000005|
| checking privileges on cached | 0.000003 |
| sending cached result to clien | 0.000040|
| logging slow query | 0.000002 |
| cleaning up | 0.000002 |
±-------------------------------±---------+
6 rows in set (0.00 sec) (注意黄色标记的地方)

结论:可以看出此次第二次查询因为前一次的查询生成了cache,所以这次无需从数据库文件中再次读取数据而是直接从缓存中读取,结果查询时间比第一次快多了(第一次查询用了1.5秒而本次用了不到5毫秒)。

Star CCM+中衍生零部件下的阈值应用与区域内删除目标网格 同样的在绘制网格结束后,有时出现负体积网格或质量差的网格,为了节约时间成本,可能会选择将负体积的网格或质量差的网格删除。弹出相应的窗口,在窗口中选择相应的区域①,选择标量函数②(此处以网格体积变化为例),选择模型③,设置阈值④,选择No Dispalyer,会根据需求选择显示,最后点击Create⑥完成创建。此处以温度为例,若出现温度异常点,首先在①栏中勾选Function,然后在下面点击⑤Select,在弹出的Function窗口中选择温度场函数,再点击④Identify,查找温度异常网格数量。 阅读详情

相关推荐

树莓派c语言串口通讯程序

在网上搜了很多关于树莓派串口通讯的例子,但是都是用python写的,虽然python很有名,而且最近也在学习这门语言, 但是还是想用c语言实现一下,因为需要用到整套系统里,其他内容都是用c语言写的。但是网上没有找打现成的。 还好,之前做过天嵌2440开发板的串口程序(参照天嵌工程师提供的代码),发现串口程序其实是通用的, 驱动层屏蔽了硬件细节,个人猜测,几乎所有移植好的系统的串口,都可以用一

realank的专栏 1万+

mysql调优三步曲(慢查询、explain profile)

mysql profile explain slow_query_log分析优化查询 在做性能测试中经常会遇到一些sql的问题,其实做性能测试这几年遇到问题最多还是数据库这块,要么就是IO高要么就是cpu高,所以对数据的优化在性能测试过程中占据着很重要的地方,下面我就介绍一些msyql性能调优过程中经常用到的三件利器: 1、慢查询 (分析出现出问题的sql) 2、Explain (显示了my...

系统运维 1226

从零搭建一个AF架构项目:基于TIA Portal V19和S7-PLCSIM的仿真调试全流程

本文详细介绍了如何在TIA Portal V19环境中从零搭建西门子Automation Framework(AF架构)项目,包括环境准备、硬件组态、核心组件创建、项目架构分层实现以及仿真调试全流程。通过模块化编程和标准化接口设计,AF架构显著提升工业自动化项目的开发效率和维护便利性,特别适合S7-1500系列PLC的应用开发。

weixin_29313547的博客 674

MySQL中使用explain和profile分析SQL执行计划和性能

注:上一篇博文中提到了如何定位效率比较低的sql语句,本文重在介绍如何使用explain和profile对其进行分析和改进,因为系统设计的数据表和SQL语句较少,所以此种方案不失为一种好的选择。一、explain介绍在分析查询性能时,考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行

TFIAC的专栏 3495

TI C2000 , .cmd文件,.TI.ramfunc,将程序分配为在RAM中运行/Flash运行的配置方法和原理讲解,(如28375S ,280049,28335等等芯片)

1 基础知识讲解 1.1 在RAM中运行还是在flash中运行指的是什么? 1.1.1 背景:程序编译完之后生成的.bin文件,.bin文件中包含代码段,代码段中全是汇编指令,而汇编指令中包含多个函数,各函数头的地址不同,如存在A函数和B函数,假设RAM地址区间是0x0000-0x8000,flash的地址区间是0xA000-0xF000,A函数要调用B函数,则A函数调用B函数的那段汇编指令中包含的是B函数头的存储地址,A函数和B函数都在flash中有存储 1.1.2 情况1:B函数是配置为在RAM中运行,

weixin_43776284的博客 8068

SolidWorks + AI:利用 DeepSeek AI 自动生成 VBA Macro 宏,实现智能化建模!

本教程介绍如何将集成到插件,实现的自动化操作。通过 DeepSeek AI,您可以快速生成高效的,提升!💡。

SolidWorksAPI的专栏 1万+

mysql 显示 执行时间_mysql显示SQL语句执行时间的实例详解

本节内容:显示SQL语句执行时间MySQL 的 SQL 语法调整主要使用 EXPLAIN,不过该命令无法获取详细的 Ram(Memory)/CPU 等使用量.于 MySQL 5.0.37 以上开始支持 MySQL Query Profiler, 可以查詢到此 SQL执行多长时间,并 並看出 CPU/Memory 使用量, 执行过程中 System lock, Table lock 花多少时间等.效...

weixin_42133680的博客 768

保姆级教程:用安卓手机+IP摄像头App,5分钟搭建一个免费的RTSP监控测试环境

本文提供了一份详细的保姆级教程,教你如何利用安卓手机和IP摄像头App在5分钟内搭建免费的RTSP监控测试环境。通过零成本方案,开发者可以快速获取实时视频流,适用于计算机视觉、物联网开发等多种场景。教程涵盖工具选型、配置详解、电脑端测试及OpenCV集成,助你高效完成开发测试。

weixin_27419879的博客 276

图文结合带你搞懂MySQL日志之Slow Query Log(慢查询日志)

MySQL 的慢查询日志,用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过 long_query_time 值的 SQL,则会被记录到慢查询日志中。long_query_time 的默认值为 10,意思是运行 10 秒以上 (不含 10 秒) 的语句,认为是超出了我们的最大忍耐时间值。它的主要作用是,帮助我们发现那些执行时间特别长的 SQL 查询,并且有针对性地进行优化,从而提高系统的整体效率。

Java_zhujia的博客 5721

RK3588 固定hdmiin的dev/videoX节点

RK3588 固定hdmiin的dev/videoX节点

目前从事linux驱动开发,多交流多学习吧 2050

解锁激光加工密码:功率、频率、脉宽、占空比全解析

激光加工利用高能量激光束实现材料加工,具有无接触、高效率等特点。其核心参数包括功率(决定能量输出)、频率(控制脉冲重复)、脉宽(调节能量作用时间)和占空比(调控工作周期),这些参数相互协同影响加工效果。针对不同材料需采用差异化参数组合:金属材料需较高功率,塑料需低功率防过热,陶瓷需高频短脉宽减少热应力。实际操作中应通过小范围测试逐步优化参数,并注意解决烧损、切割不平整等常见问题。合理调节这些参数可实现高质量、高效率的激光加工。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 616

Windows本地部署OpenClaw企业知识库与飞书机器人集成实战

大语言模型(LLM)通过理解与生成自然语言,正深刻改变信息获取与交互方式。其核心原理是基于海量数据训练,学习语言规律与知识关联,从而具备强大的语义理解和内容生成能力。在工程实践中,LLM的技术价值在于能够作为智能中枢,处理非结构化文档,并通过向量数据库实现精准的语义检索,构建专属知识库。这一能力在企业级应用场景中尤为重要,例如搭建内部智能问答系统,能有效整合散落的文档、产品手册和客服QA,提升信息利用效率。OpenClaw作为一个开源项目,正是基于这一技术栈,实现了本地化部署的企业知识库解决方案。本文聚焦于

weixin_34343308的博客 469

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

mysql调优explain_mysql调优三步曲(慢查询、explain profile)

mysql profile explain slow_query_log分析优化查询mysql在作性能测试中常常会遇到一些sql的问题,其实作性能测试这几年遇到问题最多仍是数据库这块,要么就是IO高要么就是cpu高,因此对数据的优化在性能测试过程当中占据着很重要的地方,下面我就介绍一些msyql性能调优过程当中常常用到的三件利器:web一、慢查询 (分析出现出问题的sql)sql二、Explain...

weixin_35249119的博客 182

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

linux下的mysql调优_MySQL调优三步曲(慢查询、explain profile)

MySQL profile explain slow_query_log分析优化查询在做性能测试中经常会遇到一些sql的问题,其实做性能测试这几年遇到问题最多还是数据库这块,要么就是IO高要么就是cpu高,所以对数据的优化在性能测试过程中占据着很重要的地方,下面我就介绍一些msyql性能调优过程中经常用到的三件利器:1、慢查询 (分析出现出问题的sql)2、Explain (显示了mysql如何使...

weixin_31520435的博客 249

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

转载--MySQL调优三步曲--慢查询、explain、profile

转载--MySQL调优三步曲--慢查询、explain、profile mysql profile explain slow_query_log分析优化查询 在做性能测试中经常会遇到一些sql的问题,其实做性能测试这几年遇到问题最多还是数据库这块,要么就是IO高要么就是cpu高,所以对数据的优化在性能测试过程中占据着很重要的地方,下面我就介绍一些msyql性能调优过程中经常用到的三件利器: 1、慢查询 (分析出现出问题的sql) 2、Explain (显示了mysql如何使用索引来处理select语句以及连

weixin_44221018的博客 272

MySQL调优sql语句三步曲(慢查询、explain profile)

mysql profile explain slow_query_log分析优化查询 在做性能测试中经常会遇到一些问题,cpu过高,所以对数据的优化在性能测试过程中占着据着很重要的位置,下面我就介绍一些msyql性能调优过程中经常用到的三件利器: 1、慢查询(分析出问题的sql) 2、Explain(显示了sql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询...

weixin_43658613的博客 303

mysql调优三部曲_MySQL调优三步曲(慢查询、explain profile)

在做性能测试中经常会遇到一些sql的问题,其实做性能测试这几年遇到问题最多还是数据库这块,要么就是IO高要么就是cpu高,所以对数据的优化在性能测试过程中占据着很重要的地方,下面我就介绍一些msyql性能调优过程中经常用到的三件利器:1、慢查询 (分析出现出问题的sql)2、Explain (显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句...

weixin_36206609的博客 356

MySQL怎么打开explain_MySQL调优三步曲(慢查询、explain profile)(转)

MySQL调优三步曲(慢查询、explain profile)(转)在做性能测试中经常会遇到一些sql的问题,其实做性能测试这几年遇到问题最多还是数据库这块,要么就是IO高要么就是cpu高,所以对数据的优化在性能测试过程中占据着很重要的地方,下面我就介绍一些msyql性能调优过程中经常用到的三件利器:1、慢查询 (分析出现出问题的sql)2、Explain (显示了mysql如何使用索引来处理se...

weixin_29248653的博客 102

转载--MySQL调优三步曲(慢查询、explain profile)

mysql profile explain slow_query_log分析优化查询 在做性能测试中经常会遇到一些sql的问题,其实做性能测试这几年遇到问题最多还是数据库这块,要么就是IO高要么就是cpu高,所以对数据的优化在性能测试过程中占据着很重要的地方,下面我就介绍一些msyql性能调优过程中经常用到的三件利器: 1、慢查询 (分析出现出问题的sql) 2、Explain ...

iefjovi的专栏 1522
上一篇: php实现几种常见的排序算法
下一篇: windows phpstudy配置https
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值