`

查看mysql语句运行时间的2种方法

 
阅读更多

<div class="iteye-blog-content-contain" style="font-size: 14px"></div>

网站运行很慢的时候,我就特别起知道为什么这么慢,所以我查啊查,数据库绝对是很重要的一部分,里面运行的sql是绝对不能放过的。平时做项目的时候,我也会注意sql语句的书写,写出一些高效的sql来,所以我会经常测试自己写的sql语句。我把我知道的二个方法,总结一下发出来。

一,show profiles 之类的语句来查看

1,查一下profile是不是打开了,默认是不打开的。

 

mysql> show profiles;
Empty set (0.02 sec)

mysql> show variables like "%pro%";
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| profiling                 | OFF   |
| profiling_history_size    | 15    |
| protocol_version          | 10    |
| slave_compressed_protocol | OFF   |
+---------------------------+-------+
4 rows in set (0.00 sec)

我查看一下profiles里面没有东西,所以公司的电脑里面profile是没有打开的,我查看了一下mysql变量,果然是OFF的。

2,开启profile,然后测试

开启profile

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

测试如下:

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| aa             |
| bb             |
| comment        |
| string_test    |
| user           |
+----------------+
5 rows in set (0.00 sec)

mysql> select * from aa;
+----+------+------------+------+
| id | name | nname      | sex  |
+----+------+------------+------+
|  2 | tank | bbbb,4bbbb | NULL |
|  3 | zhang| 3,c,u      | NULL |
+----+------+------------+------+
2 rows in set (0.00 sec)

mysql> update aa set name='d';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> delete from bb;
Query OK, 2 rows affected (0.00 sec)

mysql> show profiles;
+----------+------------+------------------------+
| Query_ID | Duration   | Query                  |
+----------+------------+------------------------+
|        1 | 0.00054775 | show tables            |
|        2 | 0.00022400 | select * from aa       |
|        3 | 0.00026275 | update aa set name='d' |
|        4 | 0.00043000 | delete from bb         |
+----------+------------+------------------------+
4 rows in set (0.00 sec)

mysql> show profile;
+----------------------+-----------+
| Status               | Duration  |
+----------------------+-----------+
| (initialization)     | 0.0000247 |
| checking permissions | 0.0000077 |
| Opening tables       | 0.0000099 |
| System lock          | 0.000004  |
| Table lock           | 0.000005  |
| init                 | 0.0003057 |
| query end            | 0.0000062 |
| freeing items        | 0.000057  |
| closing tables       | 0.000008  |
| logging slow query   | 0.0000015 |
+----------------------+-----------+
10 rows in set (0.00 sec)

mysql> show profile for query 1;
+----------------------+-----------+
| Status               | Duration  |
+----------------------+-----------+
| (initialization)     | 0.000028  |
| checking permissions | 0.000007  |
| Opening tables       | 0.0000939 |
| System lock          | 0.0000017 |
| Table lock           | 0.0000055 |
| init                 | 0.000009  |
| optimizing           | 0.0000027 |
| statistics           | 0.0000085 |
| preparing            | 0.0000065 |
| executing            | 0.000004  |
| checking permissions | 0.000258  |
| Sending data         | 0.000049  |
| end                  | 0.0000037 |
| query end            | 0.0000027 |
| freeing items        | 0.0000307 |
| closing tables       | 0.0000032 |
| removing tmp table   | 0.0000275 |
| closing tables       | 0.0000037 |
| logging slow query   | 0.000002  |
+----------------------+-----------+
19 rows in set (0.00 sec)

mysql> show profile for query 3;
+----------------------+-----------+
| Status               | Duration  |
+----------------------+-----------+
| (initialization)     | 0.0000475 |
| checking permissions | 0.0000077 |
| Opening tables       | 0.000026  |
| System lock          | 0.0000042 |
| Table lock           | 0.0000045 |
| init                 | 0.0000205 |
| Updating             | 0.0000787 |
| end                  | 0.0000567 |
| query end            | 0.000004  |
| freeing items        | 0.0000067 |
| closing tables       | 0.000004  |
| logging slow query   | 0.000002  |
+----------------------+-----------+
12 rows in set (0.00 sec)

二,timestampdiff来查看测试时间

mysql> set @d=now();
Query OK, 0 rows affected (0.00 sec)

mysql> select * from comment;
+------+-----+------+------------+---------------------+
| c_id | mid | name | content    | datetime            |
+------+-----+------+------------+---------------------+
|    1 |   1 | ??   | 2222222211 | 2010-05-12 00:00:00 |
|    2 |   1 | ??   | ????(??)   | 2010-05-13 00:00:00 |
|    3 |   2 | tank | ??????     | 0000-00-00 00:00:00 |
+------+-----+------+------------+---------------------+
3 rows in set (0.00 sec)

mysql> select timestampdiff(second,@d,now());
+--------------------------------+
| timestampdiff(second,@d,now()) |
+--------------------------------+
|                              0 |
+--------------------------------+
1 row in set (0.00 sec)

这种方法有一点要注意,就是三条sql语句要尽量连一起执行,不然误差太大,根本不准

set @d=now();
select * from comment;
select timestampdiff(second,@d,now());

如果是用命令行来执行的话,有一点要注意,就是在select timestampdiff(second,@d,now());后面,一定要多copy一个空行,不然最后一个sql要你自己按回车执行,这样就不准了。

其实我觉得吧,真正要我们关心的是,那些查询慢的sql,因为真正影响速度的是他们,关于慢查询的东西,有空写一下。

分享到:
评论

相关推荐

    mysql常用性能查询语句

    该语句可以查看 MySQL 服务器自上次启动以来的运行时间,以秒为单位。 2. 查看 select 语句的执行数 使用语句:show status like 'com_select'; 该语句可以查看 MySQL 服务器自上次启动以来的 select 语句执行...

    mysql语句转postgres的工具

    在这个过程中,`MysqlToPostgresUtil`工具扮演着重要的角色,它能帮助我们将MySQL的DDL(Data Definition Language)语句转换为PostgreSQL兼容的格式,从而简化迁移过程。 MySQL和PostgreSQL虽然都是关系型数据库...

    Excel生成MYSQL建表语句

    标题中的“Excel生成MYSQL建表语句”是指利用JAVA编程技术,通过读取预先设计好的Excel模板,自动生成对应的MySQL数据库建表语句的过程。这个过程通常涉及到数据处理、文件读写以及数据库操作等核心技能。 首先,让...

    Effective MySQL之SQL语句最优化.pdf

    2. MySQL数据库简介:MySQL是一个开放源代码的关系型数据库管理系统,广泛应用于Web应用中。它使用结构化查询语言(SQL)进行数据库管理。 3. SQL语句优化的重要性:在数据库操作中,SQL语句的效率直接影响到应用的...

    MySQL的语句总结.

    本篇文章旨在为初学者提供一份简明扼要的MySQL语句指南,涵盖了数据库管理和操作的基本方面。以下将详细介绍文件中提到的一些关键知识点。 #### 1. 检查MySQL服务状态 ```bash sudo service mysqld status ``` 这...

    mysql 数据库转 oracle

    MySQL到Oracle的数据迁移是一项常见的任务,特别是在企业级应用中,可能因为各种原因需要从MySQL迁移到功能更强大的Oracle数据库系统。下面将详细讲解这个过程涉及的关键知识点。 首先,我们需要了解MySQL和Oracle...

    MYSQL C API预处理语句

    总的来说,MySQL C API预处理语句提供了一种高效且安全的方法来与MySQL数据库交互,通过预编译的SQL语句,可以避免SQL注入,同时提升代码的可读性和可维护性。正确配置开发环境,理解和使用预处理语句是进行MySQL C ...

    《Effective MySQL之SQL语句最优化》手册

    《Effective MySQL之SQL语句最优化》是一本深入探讨如何提升数据库性能的专业手册,它针对SQL语句的优化提供了一系列实用且高效的策略。在数据库管理领域,SQL优化是提升系统性能的关键环节,尤其是在处理大数据量时...

    探讨:MySQL中如何查询当前正在运行的SQL语句

    当你在MySQL客户端输入`status`并执行时,它会显示一些关键信息,例如MySQL的版本、连接ID、当前数据库、用户、字符集、服务器运行时间、线程数量、已执行的查询总数以及慢查询的数量等。例如: ``` mysql&gt; status;...

    Python-MysqlMonitor一款监控mysql执行语句的工具

    Python-MysqlMonitor是一款专为MySQL数据库设计的监控工具,它可以帮助用户实时跟踪和分析MySQL服务器上执行的SQL语句,从而优化数据库性能、定位问题和提升运维效率。这款工具主要面向数据库管理员和开发人员,通过...

    mysql数据库介绍及常用SQLl语句(整理).pdf

    MySQL是一种广泛使用的开源关系型数据库管理系统,由瑞典的MySQL AB公司开发,后来被Sun Microsystems公司收购,Sun公司又被甲骨文公司(Oracle Corporation)收购。MySQL使用结构化查询语言(SQL)进行数据库管理,...

    SQLMonitor2.4.3.6(监控Oracle和MYSQL语句)

    例如,通过查看长时间运行的SQL语句,可以针对性地进行代码优化或调整索引策略;通过分析I/O性能,可以判断是否需要升级硬件或调整存储配置。此外,它还能辅助排查故障,如发现异常的会话或资源消耗,及时采取措施...

    mysql数据库CPU高,实时抓住数据库执行中的SQL语句,shell工具(支持mysql5.7)

    mysqlCPU高语句实时监控 #适用于实时查询mysql占用CPU高的语句,循环监控mysql进程情况,当CPU大于一定的前执行中的SQL情况. #执行前,修改ENV认证部分 #编写:Chaoren #2022年3月4日18:38:53 # #对于执行时间非常短...

    《Effective MySQL之SQL语句最优化》数据库SQL

    定期检查慢查询日志,找出运行时间过长的SQL语句进行优化。使用性能监控工具,如MySQL的Performance Schema,可以提供关于查询执行的详细信息,帮助定位性能瓶颈。 最后,了解并掌握分区和分片策略。对于大规模数据...

    如何不进去mysql而直接执行sql语句

    例如,如果你发现某个查询运行时间过长,可以通过`SHOW FULL PROCESSLIST;`来获取更详细的进程信息,帮助你进行优化。 在实际应用中,你还可以结合shell脚本、cron定时任务等工具,实现定时执行SQL任务,无需手动...

Global site tag (gtag.js) - Google Analytics