2011-09-21 123 views
6

這僅僅是問的緣故一個問題:表大小是否影響INSERT性能?

除非所有的中級到高級的主題或技術(羣集索引,批量插入,出口/進口技巧等),並在INSERT需要較長時間較大的表成長?

這假定只有一個auto-int列,即ID [即所有新行都在底部被插入,其中沒有內存必須被混洗以適應特定的行定位]。


鏈接到一個很好的「基準MySQL」將很方便。我在學校學習了Oracle,到目前爲止,這些知識對我來說並沒有什麼好處。

謝謝大家。

回答

5

我的經驗是,如果數據集索引不再適合內存,性能會降低。一旦發生這種情況,檢查重複索引將不得不打到磁盤,並且會顯着減慢。用盡可能多的數據製作一張桌面,然後進行一些測試和調整。這真的是知道你會遇到什麼的最好方法。

1

我只能分享我的經驗。希望能幫助到你。

我在大量數據庫(數百萬條目)上插入大量行。我有一個腳本可以打印執行插入前後的時間。以及我沒有看到任何表演下降。

希望它給了你一個想法,但我在sqlite不在mysql上。

+0

如果您向我展示具有示例輸出結果的性能基準測試腳本的通用版本,我會給出最佳答案。謝謝。 – Droogans

+0

這不是一個基準測試腳本,因爲我說我在查詢前後打印時間,所以我看到他們需要多長時間。我使用了一個python腳本,這是要做到這一點的聲明:print datetime.datetime.now()。strftime(「%H:%M:%S」) – Danny

6

是的,但它不是表本身的大小,而是指標的大小。一旦索引重寫開始顛覆磁盤,你會發現放緩。沒有索引的表(當然,在數據庫中你永遠不會有這樣的事情)應該看不到降級。具有最小緊湊索引的表可以增長到非常大的尺寸而不會看到退化。包含許多大型指數的表格將開始更快降級。

+0

現在使用谷歌搜索「index rewriting」...謝謝。 – Droogans

1

只要MySQL能夠更新內存中的全部索引,速度不受影響,當它開始換出索引時,速度會變慢。如果您立即使用ALTER TABLE重建一個巨大的索引,會發生這種情況。