2011-12-28 25 views
1

這裏的情況在一段時間內插入忽略效率

隨着時間的推移,我將擁有一個大約40-50萬條記錄的MySQL數據庫。記錄從文本文件(通過PHP腳本,按下網頁上的按鈕後)從其他部門(不在我手中)每天更新2-3次(附加)。我必須在數據庫中插入這些新記錄(當我的網頁上的按鈕被按下時)並忽略那些已經存在的記錄。爲此,我使用"Insert Ignore"聲明。

我的問題是當記錄長大(40-50萬)時,"Insert Ignore"語句需要很長時間才能執行(我的瀏覽器超時時間是5秒,我不能超越這個時間)。永遠不會有超過300個獨特的記錄在一次更新,而我的表只有2列(如果有的話)。該系統現在工作完美,但我想爲未來做好準備。我無法測試他,所以如果有人能根據他/她的經驗告訴我,我會很感激。

+0

你期望增長多大? – 2011-12-28 21:51:34

+0

正如我所提到的,我必須準備好40-50萬條記錄。大約8萬(上限) – Ank 2011-12-28 21:52:35

+0

那麼,按照現代標準來說,它什麼都不是。但是,您應該獲得一臺測試機器(例如,在Amazon EC2上),在那裏重新創建您的環境並使用10萬條記錄進行測試。 – 2011-12-28 21:56:10

回答

1

我有一個重名稱/值系統INSERT IGNOREINSERT ... On DUPLICATE KEY UPDATE。 當表變大時,我正在「分裂」今天的信息(更新繁重)和歸檔。另外,我不知道什麼是您的系統設計,但在我的系統(簡單名稱/計數器)中,我保存了一週的詳細信息,並且歸檔被分組以獲得較小且較少的行。

祝你好運!

+0

拆分和歸檔是一個好主意。但是在兩列中,一個是主鍵。如果你分裂,檔案你沒有機會得到重複。 – Ank 2011-12-28 21:56:20

+0

我不知道你的系統設計是什麼。如果你不能,你不能。 – 2011-12-28 21:57:56

2

一個有50k記錄的表不應該給你帶來性能問題。現在,如果你有五千萬,我可能會改變我的曲調。

正如Moshe L指出的,有幾種方法可以解決這個問題。這裏有一篇文章的鏈接,指向一個包含900萬條記錄的數據庫上的performance of ON DUPLICATE KEY vs. INSERT IGNORE。據此,你正走在正確的道路上。

+0

intersting文章。 – 2011-12-29 11:56:55