2012-11-15 38 views
2

我將MySQL數據庫從一個環境遷移到另一個環境,發現在遷移後,特定的查詢運行速度比以前慢得多。MySQL:爲什麼'explain'命令在同一個SQL語句中產生不同的結果?

我正在用'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 

回答

2

僅供參考,事實證明,在遷移時數據庫中,有一些統計信息用於引擎優化器決定最佳策略,例如連接表,這顯然沒有被複制。

解決方法是在每個表上運行ANALYZE以「重建」此類信息。因此,在對每個表執行ANALYZE之後,再次運行explain命令,輸出結果一致,查詢速度急劇增加。

相關問題