我们有一张包含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
答案 0 :(得分:1)
我们通过在内存中强制所有排序等来解决问题:
tmpdir = / dev / shm
查询现在始终运行0,1秒。它花了我们一些RAM,但我们有足够的时间来换取速度。