2011-03-03 34 views
2

我沒有大量的MySQL背景知識,我想知道任何人都可以給我一些關於MySQL查詢優化器的信息,以及在確定一個磁盤訪問時對磁盤訪問成本的影響查詢執行的查詢計劃。 我對磁盤訪問時間上收集的任何統計信息是否可以影響查詢執行計劃中的固定查詢集感興趣。特別是,在同一個數據庫映像上運行相同的一組查詢時,這些數據庫映像位於具有不同性能的不同驅動器上。 (請注意,從MySQL的角度來看,這是相同的數據庫;數據目錄只是駐留在不同的驅動器上,在「不知道」的情況下,在「MySQL下」切換)。觀察磁盤性能的這種變化是否會影響查詢優化器在運行時所做的查詢計劃決策? 我認爲在考慮磁盤訪問之前,優化器可以執行更多與SQL本身相關的其他事情,但是有些人在處理查詢優化器方面比我有更多的經驗。MySQL的查詢優化器佔用磁盤訪問時間

感謝您的幫助!

+0

不幸的是我沒有源代碼,確認它,但我幾乎可以肯定,這樣的統計資料不會被MySQL聚集。據我記得,在mysqlperformanceblog.com上發佈了MySQL優化器對SSD驅動器過時的方法(他們提到隨機I/O寫入/讀取的成本在MySQL源代碼中是硬編碼的)。 – matt

回答

1

我不知道MySQL中pyhsical I/O訪問的優化。 但是,查詢優化器會嘗試最小化查詢執行所需的I/O(例如塊的數量)。

內存和輔助I/O系統之間的速度差距如此之大,以至於在內存中保持有效的緩存是大多數關係數據庫系統性能的關鍵問題。

因此,查詢計劃應該儘可能減少查詢計劃對查詢的要求,儘可能縮短設備的查詢時間。

<Query Result> <--[Logical I/O]-- <Main Memory> <--[Physical I/O]-- <Secondary I/O System>

+0

好吧,查詢優化器仍然需要很多關於磁盤I/O的假設。至少舊規則「如果似乎超過1/3的行被where子句命中,不使用索引,而是執行全表掃描」是基於「x塊連續讀取更快比y塊隨機存取「。我確信查詢計劃的其他部分也應該有所不同。 – 2011-11-15 08:02:34