MySQL:为什么在优化表后可以更快地复制到tmp表

时间:2014-02-26 17:25:51

标签: mysql sql-server performance optimization indexing

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

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

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

示例“从A.column = b.id上的内连接B中选择*”,我们在A.column上创建索引。

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

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

表现不佳: 复制到Tmp表244 ms 发送数据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 ms 发送数据39μs 优化33μs 统计105μs 准备33μs 创建Tmp表42μs 执行11μs 复制到Tmp表23,1 ms 发送数据60μs 优化11μs 统计15μs 准备15μs 执行8μs

1 个答案:

答案 0 :(得分:1)

我们通过在内存中强制所有排序等来解决问题:

tmpdir = / dev / shm

查询现在始终运行0,1秒。它花了我们一些RAM,但我们有足够的时间来换取速度。