我有一個兩部分的PHP腳本。刪除後MySQL查詢速度慢
- 第一即刪除數據庫
- 第二觸發SELECT某些行查詢
第二腳本單獨運行約0.2秒。當兩個部分都被處理時,第二部分需要5秒。下一次單獨運行第二個腳本時,它會回到0.2秒。
任何線索?
我有一個兩部分的PHP腳本。刪除後MySQL查詢速度慢
第二腳本單獨運行約0.2秒。當兩個部分都被處理時,第二部分需要5秒。下一次單獨運行第二個腳本時,它會回到0.2秒。
任何線索?
它可能是查詢已緩存,所以它運行速度更快第二次,more info here。如果您將SQL_NO_CACHE添加到查詢中,那麼您應該能夠確定緩存是否是一個因素。
我想到了緩存,但似乎一旦查詢運行速度很快,另一個運行得更快...... – MindTailor 2010-07-20 17:48:59
每次更新表時,您的表的查詢緩存都是「無效的」。
結果是,任何對您的表的UPDATE/DELETE/INSERT都將清除該表的查詢緩存,並強制爲下一個SELECT讀取新的磁盤。結果將是一個較慢的查詢。
這是鏈接到MySQL DOCs。
如果您的表非常大,您可能需要調查MyISAM表和單獨的鍵緩存,以獲得更好的讀取性能。 MyISAM =快速讀取,快速寫入,寫入/讀取的可怕併發性。 InnoDB =讀取速度平庸,寫/更新併發性好。
- J Jorgenson -
我假設你在該表上的任何索引都在DELETE之後被重建。你能發表SHOW INDEX FROM mytable的結果嗎? – twerq 2010-07-20 17:16:52
如果您在刪除後等待幾秒鐘,「SELECT」是否會快速運行?也就是說,運行刪除,等待,然後運行select。 – Mike 2010-07-20 17:20:06
實際上有一個索引:一個主鍵。然而,兩部分腳本之間沒有等待時間。第二部分運行時索引是否重建?有沒有辦法在腳本的第二部分之前強制重建索引? – MindTailor 2010-07-20 17:22:27