我们有一张有13万张记录的桌子。一个特定的查询(有一些内部连接和联合的4个查询)需要0.13秒。表演没问题。几个小时后,我们看到同一个查询的执行时间为0.4秒至0.5秒。
我们执行一个优化表并查看:相同的查询平均在0.13秒内再次运行。
会不会是多个索引的表失去了通过优化恢复的性能?(更新、删除、插入的时间很长,所以索引在那里不会产生太大的影响)我们在那个表上有相当多的索引,因为我们认为在一个列上用于内部连接的索引是速度所必需的。这样做不对吗?
例如“从A.column =b.id上的A内部联接B中选择*”,我们在A.column上建立索引。
PS:在测试时,我们禁用查询缓存。
编辑:分析信息的细节是不同的,显然在优化表之后,复制到tmp表会更快。
性能不佳:复制到Tmp表244 ms发送数据40 s优化44 s 141 s准备37 s创建Tmp表45 s执行8s复制到Tmp表213,6 ms发送数据44 s优化7s 25 s准备9 s执行6 s
良好性能:复制到Tmp表22,1 ms发送数据39 s优化33 s统计数据10 0s准备33 s创建Tmp表42 s执行11 s复制到Tmp表23 1 ms发送数据60 s优化11 s统计15 s准备执行8s
发布于 2014-04-23 16:15:56
我们“解决”了这个问题,强迫记忆中的所有排序等等:
tmpdir = /dev/shm
查询现在总是运行0,1秒。它花了我们一些内存,但我们有足够的钱来换取速度。
https://stackoverflow.com/questions/22048751
复制相似问题