【发布时间】:2010-10-26 04:39:48
【问题描述】:
我对 MySQL 5.0.45 的一个查询在“发送数据”阶段运行缓慢。该查询是一个简单的选择,返回大约 300 个整数 ID 字段作为结果集。
mysql> SELECT source_id FROM Directions WHERE (destination_id = 10); +-----------+ | source_id | +-----------+ | 2 | | 8 | ... |第2563章 +-----------+ 341 行(2.13 秒)我很清楚为什么“发送数据”阶段如此缓慢,以及可以采取哪些措施来加快速度。请注意,我是在服务器本身的 MySQL 提示符上执行此查询,因此并不真正期望它会在“发送数据”上花费这么多时间。有什么线索吗?
如果有帮助,我在这张表上有 3 个文本字段,但由于它们没有被选中,我希望它们不是造成这种缓慢的原因。
这个查询每天运行数千次,而且每次都花 2 秒时间。
分析结果:
mysql> 显示查询 4 的配置文件; +--------------------------------+----------+ |状态 |持续时间 | +--------------------------------+----------+ | (初始化) | 0.000003 | |检查查询缓存中的查询 | 0.000051 | |检查权限 | 0.000007 | |开桌 | 0.000011 | |系统锁 | 0.000005 | |表锁 | 0.000023 | |初始化 | 0.00002 | |优化 | 0.00001 | |统计 | 0.00006 | |准备| 0.000014 | |执行 | 0.000005 | |发送数据 | 2.127019 | |结束 | 0.000015 | |查询结束 | 0.000004 | |将结果存储在查询缓存中 | 0.000039 | |释放物品 | 0.000011 | |关闭表| 0.000007 | |记录慢查询 | 0.000047 | +--------------------------------+----------+ 18 行一组(0.00 秒)更新:我偶然发现了以下网址
每个时间是指前一个事件和新事件之间经过的时间。所以,这行:
|发送数据 | 0.00016800 |
表示“执行”和“发送数据”之间经过了 0.00016800 秒。也就是说,执行查询需要 0.00016800 秒。
http://forums.mysql.com/read.php?24,241461,242012#msg-242012
有人可以验证吗?
【问题讨论】:
-
链接页面上的说法不正确。如果您在查询运行时执行
SHOW PROCESSLIST,它将显示查询确实处于Sending data 状态。 (不是上一个)。 - 请不要说进程列表正在显示执行中的下一步步骤。 :) -
@vbence:你有没有见过一个需要我们几个人才能运行的查询?上述理论是有道理的。
-
@user9111337 哦,是的。带有 WHERE 原因的聚合语句(GROUP BY)通常会导致无法通过使用索引来解决的选择(EXPLAIN ... 会说“USING WHERE”) - 如果表足够大,这可能需要几分钟。 - 这是如何报告的?您可以尝试
SHOW PROCESSLIST亲自查看。 -
戳!不敢相信这没有好的答案
-
我认为这个类似的问题应该会有所帮助。 stackoverflow.com/questions/10347193/…
标签: mysql performance