【发布时间】: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