2010-07-06 66 views

回答

5

INSERT也會變得更慢,特別是如果你有很多索引這也必須更新。

有不同的存儲引擎,雖然是不同的:MyISAM是很多SELECT快,InnoDB的是很多INSERT/UPDATE速度更快,因爲它使用行鎖定,而不是表鎖,它處理的方式索引。

+0

關於指數的好處 – Haroldo 2010-07-06 09:09:10

3

INSERT變得更慢,因爲它必須對索引進行分類。

3

一般情況下,是 - O(1)性能是罕見的任何地方,並保持目前的指標是有成本的。

問題是,爲什麼它很重要,在特定情況下你能做些什麼呢?

  • 不創造從未使用指標(如我跟上主鍵的附加單列索引查找表)
  • ,如果你不留着沒用表中的數據(或者,很少使用舊數據,考慮將它們轉移到存檔表/數據庫)
  • 當且僅當你有插入速度的問題,你不關心自動增量-ID的,INSERT DELAYED可以幫助你
1

INSERT變慢

-1

如果你的桌子很小,你會沒事的。但是如果你的表格變大,插入,更新會變得更慢,這是我使用併爲我工作的程序。

即使使用InnoDB表或MyISAM(未針對寫入進行優化)也會發生此問題,並使用第二個表編寫臨時數據(可定期更新主巨大表)來解決此問題。主表超過1800萬條記錄,用於只讀記錄並將結果寫入第二個小表。

的問題是插入/更新到大主表,需要一段時間,如果有在隊列中等待幾個更新或插入糟糕的是,即使在INSERT延遲或UPDATE [LOW_PRIORITY]選項中啓用

爲了使速度更快,請首先閱讀小輔助表,當搜索記錄時,如果te記錄存在,則僅處理第二個表。如果數據不在輔助小表上,您只需從主服務器讀取記錄(對InnoDB表或MyISAM方案快速讀取),然後插入該記錄記錄在小的第二張桌子上。

工程就像一個魅力,需要不到5秒的時間從巨大的主人讀取20萬條記錄,並在不到一秒的時間內寫入第二個小表100K到300K的記錄。

這工作得很好。

+0

在這裏傳遞一個模組的一些智慧,我引用:「請不要在多個問題上發佈相同的答案,發佈一個好的答案,然後投票/標記以重複其他問題。如果問題不是重複的,請調整問題的答案。「 – Drew 2015-12-18 06:40:46

+0

在參考你的這個答案你的分鐘之前:http://stackoverflow.com/a/34349501 – Drew 2015-12-18 06:41:27

+0

它同樣的問題兄弟...非常相似,如你所說,它是taylored ..我不在乎你的指向系統,我寫,因爲我的方法可以用作替代。你可以把負面的點,我仍然會讓我的情況。保重。 – 2015-12-18 18:47:43