2

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つについては、次のようになります。

    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 に答える