2010-06-12 67 views
0

我正在運行一個mySQL查詢,它連接了500,000多行的各種表。有時需要15秒鐘,其他時間需要一秒鐘!這是在我的本地機器上。我在其他密集查詢之前經歷過類似的不同時間,有誰知道這是爲什麼?mySQL不一致的性能

感謝

感謝您的答覆 - 我使用合適的索引,內部和左連接和有一週的WHERE子句範圍內進行可能2年期發票的。如果我不斷改變它(所以大概查詢結果沒有被緩存)並且重新運行,時間變化很大,即使沒有。檢索到的行類似。服務器不忙。每分鐘但不是密集的幾個計劃查詢需要大約200毫秒。

解釋計劃顯示總是對2000行左右的表進行全面掃描。所以也許這些行有時被緩存,或者索引被緩存 - 不知道索引可以被緩存。我將再次嘗試緩存關閉。

編輯再次 - 查詢緩存其實關,我使用的是InnoDB所以看起來增加innodb_buffer_pool_size是路要走每次

+0

問題不夠具體,有用的答案,請重構:) – MarkR 2010-06-13 11:59:25

回答

0

相同的查詢?

根據你發佈的內容很難說。如果我們假設模式和數據沒有改變,我猜測當查詢很長時,您的機器上還會運行其他內容,這可以解釋這種差異。這可能是內存狀態不同,所以分頁正在進行;一個反病毒程序正在運行;一些其他服務已經開始。這是不可能回答的。

0

嘗試做一個

OPTIMIZE TABLE

這將有助於刷新一些用於查詢規劃有用的數據。

如果你使用MyISAM表,你還沒有給我們提供太多的信息,這可能是一個鎖。

您是否在使用ANSI INNER JOIN?基本不多,但不要使用「交叉連接」。這些是與逗號連接,如

SELECT * FROM t1, t2 WHERE t1.id_t1=t2.id_t1 

最後的事情,你可能想嘗試。增加你的緩衝區(innodb),你的key_buffers(myisam)和一些查詢緩存緩衝區。

0

下面是一些常見的原因(BAR您的服務器只是太忙)

  • 慢速查詢的擊球硬盤。在快速情況下,索引和數據已經被緩存在MySQL或OS文件緩存中。

  • 檢索數據被更新/插入鎖定,對於MyISAM表,當有人在某些情況下插入/更新數據時,整個表會被鎖定。

  • 表統計信息已過期和/或選擇了錯誤的索引。在桌面上運行analyzeoptimize可以提供幫助。

  • 您已啓用查詢緩存,獲取緩存查詢的結果很快,如果緩存查詢的結果不在緩存中,則緩存可能會很慢。嘗試關閉查詢緩存以檢查查詢是否總是緩慢,如果它沒有從緩存中獲取。

在任何情況下,你應該表現出你的查詢EXPLAIN輸出驗證指標得到正確使用 - 即使他們沒有,查詢可以快速,如果一切都在RAM中,但逐漸停頓下來如果它需要擊中hardddrive。