【问题标题】:MySQL: why could copying to tmp table be faster after optimizing tableMySQL:为什么优化表后复制到 tmp 表会更快
【发布时间】:2014-03-29 17:10:38
【问题描述】:

我们有一个包含 130 000 条记录的表。某个查询(4 个带有一些内部连接和联合的查询)需要 0.13 秒。性能还可以。几个小时后,我们看到执行相同的查询需要 0.4-0.5 秒。

我们做了一个优化表,瞧:同样的查询平均在 0.13 秒内再次运行。

可能是具有许多索引的表失去了通过优化恢复的性能? (更新,删除,插入的时间很好,所以索引在那里没有太大影响)我们在那个表上有很多索引,因为我们认为需要一个用于内部连接的列上的索引为了速度。那是错的吗?

示例“Select * from A inner join B on A.column = b.id”,我们在 A.column 上做一个索引。

PS:在测试时,我们禁用了查询缓存

编辑:使用不同的细节分析信息,显然在优化表之后,复制到 tmp 表更快。

表现不佳: 复制到 Tmp 表 244 毫秒 发送数据 40 µs 优化 44 µs 统计 141 µs 准备 37 µs 创建 Tmp 表 45 µs 执行 8 µs 复制到 Tmp 表 213,6 ms 发送数据 44 µs 优化 7 µs 统计 25 µs 准备 9 µs 执行 6 µs

良好的表现: 复制到 Tmp 表 22,1 毫秒 发送数据 39 µs 优化 33 µs 统计 105 µs 准备 33 µs 创建 Tmp 表 42 µs 执行 11 µs 复制到 Tmp 表 23,1 毫秒 发送数据 60 µs 优化 11 µs 统计 15 µs 准备 15 µs 执行 8 µs

【问题讨论】:

  • 是mysql还是sql-server?如果您的缓存命中率低于 %100,则禁用生产环境中的查询缓存
  • 您研究过剖析吗? Here .. 也许您可以索引其他适当的字段。至于查询性能的下降 - 我不确定。相关问答请参阅this article
  • 已经谢谢了!如果我看到它再次降级并在优化后返回并提供更多信息,我会对其进行分析!
  • 当然 - 让我知道会发生什么。
  • 我编辑了这个问题。似乎复制到临时表的时间从 22 毫秒变为 244 毫秒。巨大的差异。我不明白,为什么优化表会“干扰”复制到 tmp 表...

标签: mysql sql-server performance optimization indexing


【解决方案1】:

我们通过强制所有排序等在内存中“解决”了这个问题:

tmpdir = /dev/shm

查询现在总是运行 0,1 秒。它花费了我们一些内存,但我们有足够的内存来换取速度。

【讨论】:

    猜你喜欢
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2014-06-19
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多