千家信息网

如何找出Mysql查询速度慢的SQL语句

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下如何找出Mysql查询速度慢的SQL语句,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!启动Mysql时加
千家信息网最后更新 2026年11月02日如何找出Mysql查询速度慢的SQL语句

小编给大家分享一下如何找出Mysql查询速度慢的SQL语句,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

启动Mysql时加参数--log-slow-queries来记录执行时间超过long_query_time秒的sql:

[@more@]

启动Mysql时加参数--log-slow-queries来记录执行时间超过long_query_time秒的sql:
/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql

--user=mysql --pid-file=/var/run/mysqld/mysqld.pid

--skip-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock --log-slow-

queries=/var/log/mysql/slow.log

explain来了解SQL执行的状态。

explain select * from wp_postsG;

使用show status like "Handler_read%"; 来了解索引的效果。

Handler_read_key 值高表示索引效果好,Handler_read_rnd_next值高表示索引低效。

用show processlist 查看当前运行状态。

mysql> show processlist;

+-----+-------------+--------------------+

| Id | User | Host | db | Command | Time| State | Info

+-----+-------------+--------------------+

|207|root |192.168.0.20:51718 |mytest | Sleep | 5 | | NULL

|208|root |192.168.0.20:51719 |mytest | Sleep | 5 | | NULL

|220|root |192.168.0.20:51731 |mytest |Query | 84 | Locked |

select bookname,culture,value,type from book where id=001

  先简单说一下各列的含义和用途,第一列,id,不用说了吧,一个标识,你要kill一个语句的时候很有用。user列,显示单前用户,如果不是 root,这个命令就只显示你权限范围内的sql语句。host列,显示这个语句是从哪个ip的哪个端口上发出的。呵呵,可以用来追踪出问题语句的用户。 db列,显示这个进程目前连接的是哪个数据库。command列,显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接 (connect)。time列,此这个状态持续的时间,单位是秒。state列,显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态 的描述,请注意,state只是语句执行中的某一个状态,一个sql语句,已查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成,info列,显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据。

  这个命令中最关键的就是state列,mysql列出的状态主要有以下几种:

  Checking table

  正在检查数据表(这是自动的)。

  Closing tables

  正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。

  Connect Out

  复制从服务器正在连接主服务器。

  Copying to tmp table on disk

由于临时结果集大于 tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。

  Creating tmp table

  正在创建临时表以存放部分查询结果。

  deleting from main table

  服务器正在执行多表删除中的第一部分,刚删除第一个表。

  deleting from reference tables

  服务器正在执行多表删除中的第二部分,正在删除其他表的记录。

  Flushing tables

  正在执行 FLUSH TABLES,等待其他线程关闭数据表。

  Killed

  发送了一个kill请求给某线程,那么这个线程将会检查kill 标志位,同时会放弃下一个kill请求。MySQL会在每次的主循环中检查kill标志位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被 其他线程锁住了,那么kill请求会在锁释放时马上生效。

  Locked

  被其他查询锁住了。

  Sending data

  正在处理 select 查询的记录,同时正在把结果发送给客户端。

  Sorting for group

  正在为 GROUP BY 做排序。

  Sorting for order

  正在为 ORDER BY 做排序。

Opening tables

  这个过程应该会很快,除非受到其他因素的干扰。例如,在执 alter TABLE 或 LOCK TABLE 语句行完以前,数据表无法被其他线程打开。 正尝试打开一个表。

  Removing duplicates

  正在执行一个 select DISTINCT

以上是"如何找出Mysql查询速度慢的SQL语句"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

正在 语句 状态 查询 线程 数据 服务器 磁盘 服务 同时 命令 数据表 时间 篇文章 索引 结果 检查 速度 重要 内存 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 蓝思科技飞鸽互联网 科技平台互联网 互联网金融 科技金融 南京欣网互联网科技 汇久创客互联网科技 北京禾田雨橡互联网科技 科技类的互联网平台 现代科技和互联网有关系吗 互联网时代科技改变生活 黑科技闪耀互联网之光 深圳育鹏互联网科技有限公司招聘 四川互联网展示科技馆设计 互联网科技包装股 新氧科技和美国互联网有关系吗 抖集互联网科技技术咨询 全球科技与互联网公司市值变化 互联网界的黑科技 银川新华互联网科技学校是国营吗 北京天晋互联网科技有限公司 科技互联网经济论坛 深圳市人人互联网科技有限公司 互联网科技未来 互联网科技公司怎么样 互联网科技咨询 青岛中康互联网医疗科技有限公司 广西互联网科技孵化中心 民营互联网公司国防科技 佛山市翊博互联网络科技有限公司 广州千川互联网科技有限公司 互联网科技职业技能培训学校
0