我可以看到SELECT
和UPDATE
語句隨着表的增長而變慢,但INSERT
呢?是MySQL INSERT語句在較大的表中較慢嗎?
回答
INSERT
也會變得更慢,特別是如果你有很多索引這也必須更新。
有不同的存儲引擎,雖然是不同的:MyISAM
是很多SELECT
快,InnoDB的是很多INSERT
/UPDATE
速度更快,因爲它使用行鎖定,而不是表鎖,它處理的方式索引。
INSERT變得更慢,因爲它必須對索引進行分類。
你可以看看這篇文章:
一般情況下,是 - O(1)性能是罕見的任何地方,並保持目前的指標是有成本的。
問題是,爲什麼它很重要,在特定情況下你能做些什麼呢?
- 不創造從未使用指標(如我跟上主鍵的附加單列索引查找表)
- ,如果你不留着沒用表中的數據(或者,很少使用舊數據,考慮將它們轉移到存檔表/數據庫)
- 當且僅當你有插入速度的問題,你不關心自動增量-ID的,
INSERT DELAYED
可以幫助你
INSERT變慢
如果你的桌子很小,你會沒事的。但是如果你的表格變大,插入,更新會變得更慢,這是我使用併爲我工作的程序。
即使使用InnoDB表或MyISAM(未針對寫入進行優化)也會發生此問題,並使用第二個表編寫臨時數據(可定期更新主巨大表)來解決此問題。主表超過1800萬條記錄,用於只讀記錄並將結果寫入第二個小表。
的問題是插入/更新到大主表,需要一段時間,如果有在隊列中等待幾個更新或插入糟糕的是,即使在INSERT延遲或UPDATE [LOW_PRIORITY]選項中啓用
爲了使速度更快,請首先閱讀小輔助表,當搜索記錄時,如果te記錄存在,則僅處理第二個表。如果數據不在輔助小表上,您只需從主服務器讀取記錄(對InnoDB表或MyISAM方案快速讀取),然後插入該記錄記錄在小的第二張桌子上。
工程就像一個魅力,需要不到5秒的時間從巨大的主人讀取20萬條記錄,並在不到一秒的時間內寫入第二個小表100K到300K的記錄。
這工作得很好。
在這裏傳遞一個模組的一些智慧,我引用:「請不要在多個問題上發佈相同的答案,發佈一個好的答案,然後投票/標記以重複其他問題。如果問題不是重複的,請調整問題的答案。「 – Drew 2015-12-18 06:40:46
在參考你的這個答案你的分鐘之前:http://stackoverflow.com/a/34349501 – Drew 2015-12-18 06:41:27
它同樣的問題兄弟...非常相似,如你所說,它是taylored ..我不在乎你的指向系統,我寫,因爲我的方法可以用作替代。你可以把負面的點,我仍然會讓我的情況。保重。 – 2015-12-18 18:47:43
- 1. 較大的對象是否較慢(C++)?
- 2. 對MySQL表的INSERT語句
- 3. monodroid較慢嗎?
- 4. MySQL WHERE語句與交叉表比較
- 5. mySQL multiple和WHERE語句中的比較
- 6. 規模較大的MYSQL表
- 7. MYSQL語法 - Insert語句
- 8. 如果MySQL的INSERT語句
- 9. PHP MYSQL比較行WHERE語句
- 10. INSERT ... SELECT Mysql語句錯誤
- 11. 在INSERT語句
- 12. 更改INSERT語句在PHP/MySQL的
- 13. 在INSERT語句中使用rand()也很慢?
- 14. 在SQL語句中比較日期
- 15. INSERT語句
- 16. 在if語句中比較兩個LongWritable
- 17. 在if語句中比較字符串
- 18. SQL語句 - 比較兩個表列
- 19. if語句,比較列表,python
- 20. if語句在MySQL INSERT不工作
- 21. 與MySQL INSERT語句中使用變量
- 22. R:ifelse語句:比較data.frames
- 23. 選擇SQL語句比較
- 24. 比較兩個select語句
- 25. rails - 語句數組比較
- 26. 無法比較if語句中的值
- 27. 比較JPasswordfield和JTextField在IF語句中繼續去else語句
- 28. mysql比較表
- 29. Mysql比較表中的值
- 30. Mysql的INSERT語句的差異
關於指數的好處 – Haroldo 2010-07-06 09:09:10