2010-07-20 207 views
4

我有一個兩部分的PHP腳本。刪除後MySQL查詢速度慢

  1. 第一即刪除數據庫
  2. 第二觸發SELECT某些行查詢

第二腳本單獨運行約0.2秒。當兩個部分都被處理時,第二部分需要5秒。下一次單獨運行第二個腳本時,它會回到0.2秒。

任何線索?

+2

我假設你在該表上的任何索引都在DELETE之後被重建。你能發表SHOW INDEX FROM mytable的結果嗎? – twerq 2010-07-20 17:16:52

+0

如果您在刪除後等待幾秒鐘,「SELECT」是否會快速運行?也就是說,運行刪除,等待,然後運行select。 – Mike 2010-07-20 17:20:06

+0

實際上有一個索引:一個主鍵。然而,兩部分腳本之間沒有等待時間。第二部分運行時索引是否重建?有沒有辦法在腳本的第二部分之前強制重建索引? – MindTailor 2010-07-20 17:22:27

回答

1

它可能是查詢已緩存,所以它運行速度更快第二次,more info here。如果您將SQL_NO_CACHE添加到查詢中,那麼您應該能夠確定緩存是否是一個因素。

+0

我想到了緩存,但似乎一旦查詢運行速度很快,另一個運行得更快...... – MindTailor 2010-07-20 17:48:59

0

每次更新表時,您的表的查詢緩存都是「無效的」。

結果是,任何對您的表的UPDATE/DELETE/INSERT都將清除該表的查詢緩存,並強制爲下一個SELECT讀取新的磁盤。結果將是一個較慢的查詢。

這是鏈接到MySQL DOCs

如果您的表非常大,您可能需要調查MyISAM表和單獨的鍵緩存,以獲得更好的讀取性能。 MyISAM =快速讀取,快速寫入,寫入/讀取的可怕併發性。 InnoDB =讀取速度平庸,寫/更新併發性好。

- J Jorgenson -