1. 程式人生 > >關於數據庫優化3——在數據庫插入、更新大量數據的性能優化

關於數據庫優化3——在數據庫插入、更新大量數據的性能優化

alt 這樣的 們的 比較 重新 操作 做了 定時任務 場景

  在真實的業務場景中,我們肯定是遇到過有時候需要大批量的數據要進行入庫或者是更新。這時候我們在執行這種插入,或者是更新的時候肯定會遇到數據庫效率的問題,我們首先能想到的是讓事物盡量保持一致,統一去提交事務,這樣肯定會有一定的效率提示。

  ok。在我們在考慮了這個事情之後,我們可以在來看一下表裏是否存在索引,如果存在索引,我們可以做一個這樣的操作:首先在插入大量數據的時候,先把索引廢除掉,等插入完成後在把索引重新建立。我在這裏做了一個簡單的實驗,整理了一下實驗的結果,有了下面的一個執行效率的圖。

  技術分享

  實驗是我們有一張T表,T表中有29W左右的數據,首先我們為T表建立N個索引,在去插入T表一遍原有的數據是15秒

,而T表中沒有索引的時候我們插入的時間是2秒左右,但是索引建立的時間慢了一點,但是肯定不會超過15秒,所以我們效率的提升還是很明顯的。(T表建立這麽多索引只是為了實驗效果明顯一些,是為了彌補數據量沒有那麽大)

  這個時候我們可以總結一下:在插入數據之前先讓索引暫時失效,插入完成之後,我們在重新建立索引,雖然在插入完成後再去重新建立索引。有了這樣的操作我們的大批量的數據操作的效率會提升很多,但是需要註意的是,在重建索引的時候如果那張表在其他地方使用中,有可能會導致索引的建立失敗,所以這種操作適合在系統使用量比較小的時候使用,例如在執行定時任務的時候,或者深夜需要更新或插入大量數據的時候去做。

  

索引會導致插入或者更新慢的原因:因為索引是需要維護的當數據越大,索引需要維護的量越大,而這個維護的操作需要的代價是很高的,所以上面的操作可以使大批量的新增或者更新有了飛的提升。(其實,這個實驗是源於我們公司有個需求是每天在一個時間需要進行大批量的插入和更新,本來是有這樣的操作,但是公司請了一個DBA之後,DBA覺得這個操作是沒有必要的,當時又沒有人知道這個操作是為了什麽,就讓我們去掉這個操作,在他們私下討論中我偶然聽到說我們開發水平低,對於數據庫的機制不了解,所以才有這些沒用的操作,我就很不服,所以才有了以上的實驗)

關於數據庫優化3——在數據庫插入、更新大量數據的性能優化