2009-12-15 68 views
2

我有一個複雜的MySQL查詢,它連接三個表並自行將一個表連接到它自己。MySQL Master和Slave與執行計劃差異很大

有一個主數據和索引相同的主數據和從數據。與Slave相比,Master是一個強大的工具箱,但查詢在Slave上運行速度提高了10倍(在Master的輕負載期間)。

執行計劃大不相同。

Master execution plan 
1, 'SIMPLE', 'table3_', 'const', 'PRIMARY', 'PRIMARY', '12', 'const', 1, 100.00, 'Using temporary; Using filesort' 
1, 'SIMPLE', 'table2_', 'ref', 'PRIMARY,FK376E02E910238FCA', 'FK376E02E910238FCA', '13', 'const', 105, 100.00, 'Using where' 
1, 'SIMPLE', 'table0_', 'ref', 'FK57012F937DD0DC02,FK57012F9398CD28D0', 'FK57012F9398CD28D0', '13', 'table2_.ID', 1515, 100.00, 'Using where' 
1, 'SIMPLE', 'table1_', 'eq_ref', 'PRIMARY,FKE7E81F1ED170D4C9', 'PRIMARY', '8', 'table0_.FK_ID', 1, 100.00, 'Using where' 

Slave execution plan 
1, 'SIMPLE', 'table3_', 'const', 'PRIMARY', 'PRIMARY', '12', 'const', 1, 100.00, 'Using filesort' 
1, 'SIMPLE', 'table1_', 'ref', 'PRIMARY,FKE7E81F1ED170D4C9', 'FKE7E81F1ED170D4C9', '9', 'const', 187398, 100.00, 'Using where' 
1, 'SIMPLE', 'table0_', 'ref', 'FK57012F937DD0DC02,FK57012F9398CD28D0', 'FK57012F937DD0DC02', '9', 'table1_.ID', 1, 100.00, 'Using where' 
1, 'SIMPLE', 'table2_', 'eq_ref', 'PRIMARY,FK376E02E910238FCA', 'PRIMARY', '12', 'table0_.FK_ID', 1, 100.00, 'Using where' 

表格按不同的順序處理,主數據庫同時使用臨時表和文件夾,而從服務器只使用文件夾。

什麼因素會導致執行時間差異巨大的不同計劃?

更新:

這是否有可能與索引統計?我計劃在小批量期間在主站上運行分析表。 SHOW INDEX顯示Master和Slave之間的一些按鍵的基數不同。

+0

這是同一個問題的線索http://stackoverflow.com/questions/591210/mysql-expla不同服務器上的結果不一樣 - 同一查詢同一個db – 2013-02-01 02:21:16

回答

2

MySQL根據收集的統計信息優化查詢。

看你的輸出你看,他們使用不同的密鑰,您可能需要添加關鍵提示,甚至迫使鍵

FROM table2_ JOIN

應該成爲

FROM table2_使用Key( 'FK376E02E910238FCA')JOIN

,或者強制KEY

+0

實際的統計數據會隨着時間而改變,所以我寧願不提供重要提示。我要去嘗試今晚的ANALYZE TABLE來重建統計數據,看看這是否有幫助。如果是這樣,我會將其添加到數據庫的日常維護計劃中。 – 2009-12-15 19:53:20

+0

在主設備上的相關表上運行ANALYZE TABLE之後,我得到了與從設備相同的執行計劃和可比較的執行時間。我將選擇這個答案,因爲它與收集的統計數據最爲接近,但我沒有在查詢中指定關鍵字,並且在這種情況下不認爲這是個好主意。 – 2009-12-16 05:20:37

0

這看起來像查詢優化器中的一個bug。我會report it

這兩臺服務器都在同一版本的MySQL上嗎?

+0

兩者都使用完全相同的MySQL版本,儘管主服務器使用64位版本,而從服務器使用32位服務器。 – 2009-12-15 19:35:57

+0

「只是不同的計劃」不是一個bug – noonex 2009-12-15 19:56:29

+0

一個不同的計劃,導致更快的硬件執行速度較慢。這聽起來像是一個性能問題。 – 2009-12-16 01:39:45