【问题标题】:MySql "Preparing" costs too much timeMySql“准备”花费太多时间
【发布时间】: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


【解决方案1】:

我将在我的回答中大胆猜测,您可能不使用任何索引

在 SQL 优化中,Indexing is a broken cheat,类似于contra 中的konami-code,或age of empire 中的doors

无论如何,请尝试在您的数据库中添加一些索引,然后返回给我们,并为您现在准备阶段的速度感到惊讶。

【讨论】:

猜你喜欢
  • 2018-01-08
  • 2012-09-03
  • 2022-06-22
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多