我将MySQL数据库从一个环境迁移到另一个环境,并发现迁移后,特定查询的运行速度比以前慢得多。
我正在调查带有'explain'关键字的语句(如下所示),并发现'explain'命令在不同的服务器上提供不同的输出。
explain select distinct j.job,f.path,p.path
from fixes f
join jobs j on f.job=j.id
join paths p on p.id =f.path
where p.path like '//depot1/Dev\-trunk/%' ;
对于原始的,它给出:
1 SIMPLE p range PRIMARY,path path 752 **19** Using where; Using index; Using temporary
1 SIMPLE f ref path,job path 8 p.p.id **6448356**
1 SIMPLE j eq_ref PRIMARY PRIMARY 8 p.f.job **1**
同样的陈述在新环境中产生不同的输出:
1 SIMPLE j index PRIMARY job 62 **68486** Using index; Using temporary
1 SIMPLE f ref path,job job 8 p.j.id **812**
1 SIMPLE p eq_ref PRIMARY,path PRIMARY 8 p.f.path **1** Using where
答案 0 :(得分:2)
仅供参考,事实证明,在迁移数据库时,有一些统计数据用于引擎优化器决定最佳策略,例如连接表,显然没有被复制。
解决方案是在每个表上运行 ANALYZE
以“重建”此类信息。因此,在对每个表执行ANALYZE并再次运行explain
命令后,输出同意并且查询速度显着增加。