2

我将 MySQL 数据库从一个环境迁移到另一个环境,并发现迁移后,特定查询的运行速度比原来慢得多。

我正在调查带有“解释”关键字(如下)的语句,发现“解释”命令在不同的服务器上给出了不同的输出。

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
4

1 回答 1

2

仅供参考,事实证明,在迁移数据库时,引擎优化器会使用一些统计信息来决定例如连接表的最佳策略,这显然没有被复制。

解决方案是ANALYZE在每个表上运行以“重建”此类信息。因此,在对每个表进行 ANALYZE 并explain再次运行命令后,输出一致并且查询速度显着提高。

于 2012-11-15T19:47:29.707 回答