【发布时间】:2015-04-29 09:57:48
【问题描述】:
我是 MySQL 性能分析的新手。我发现我系统中的连接查询最近变得很慢(大约 4 个表需要 3.52 秒,每个表有大约 1000-2000 行)。我用phpmyadmin查看了性能分析。结果如下图:
1 开始 170 µs
2 打开表 44 µs
3 系统锁定 7 µs
4 表锁定 7 µs
5 初始化 65 µs
6 优化 20 µs
7 统计 92 µs
8 准备 31 µs
9 创建 Tmp 表 236 µs
10 执行 2 µs
11 复制到 Tmp 表 68 µs
12 优化 10 µs
13 统计 14 µs
14 准备 3.5 s
15 创建排序索引 2.6 ms
16 复制到组表 15.9 ms
17 排序结果 2.1 ms
18 发送数据 391 µs
19 结束 7 µs
20 删除 Tmp 表 1.3 ms
21 结束 3 µs
22 删除 Tmp 表 819 µs
23 结束 10 µs
24 查询结束 2 µs
25 释放项目 20 µs
26 删除 Tmp 表 6 µs
27 释放项目 365 µs
28 记录慢速查询 3 µs
29 清理 6 µs
我不明白为什么Preparing 阶段要花费 3.5 秒。我怎样才能减少它?
【问题讨论】:
-
仅供参考,此处描述了这些状态:dev.mysql.com/doc/refman/5.5/en/general-thread-states.html。准备中意味着此状态发生在查询优化期间。
-
我讨厌像我即将做的那样制作 cmets,但在这里 -
preparing花费您 3.5 秒,因为它慢。但你已经知道了。因此,为了确定某些事情为何缓慢,您向您询问的人(我们)提供有助于我们帮助您的信息。您必须提供的信息是表结构(以便我们可以看到索引和存储引擎)、EXPLAIN的输出以及您正在运行的查询和 MySQL 配置。 -
@Barmar 理解这一点对我很有用(实际上我确实想问一下“准备”到底是什么意思。谢谢。
-
@N.B.感谢您的提示。我只是想首先检查粗略的方向来追踪这个问题。我现在知道 EXPLAIN 可以帮助一些人。我找到了主要耗时的部分,并在stackoverflow.com/questions/29960821/mysql-in-where-is-slow 提出了一个确切的问题。
标签: php mysql performance