在真實的業(yè)務場景中,我們肯定是遇到過有時候需要大批量的數(shù)據(jù)要進行入庫或者是更新。這時候我們在執(zhí)行這種插入,或者是更新的時候肯定會遇到數(shù)據(jù)庫效率的問題,我們首先能想到的是讓事物盡量保持一致,統(tǒng)一去提交事務,這樣肯定會有一定的效率提示。
ok。在我們在考慮了這個事情之后,我們可以在來看一下表里是否存在索引,如果存在索引,我們可以做一個這樣的操作:首先在插入大量數(shù)據(jù)的時候,先把索引廢除掉,等插入完成后在把索引重新建立。我在這里做了一個簡單的實驗,整理了一下實驗的結(jié)果,有了下面的一個執(zhí)行效率的圖。
實驗是我們有一張T表,T表中有29W左右的數(shù)據(jù),首先我們?yōu)門表建立N個索引,在去插入T表一遍原有的數(shù)據(jù)是15秒,而T表中沒有索引的時候我們插入的時間是2秒左右,但是索引建立的時間慢了一點,但是肯定不會超過15秒,所以我們效率的提升還是很明顯的。(T表建立這么多索引只是為了實驗效果明顯一些,是為了彌補數(shù)據(jù)量沒有那么大)
這個時候我們可以總結(jié)一下:在插入數(shù)據(jù)之前先讓索引暫時失效,插入完成之后,我們在重新建立索引,雖然在插入完成后再去重新建立索引。有了這樣的操作我們的大批量的數(shù)據(jù)操作的效率會提升很多,但是需要注意的是,在重建索引的時候如果那張表在其他地方使用中,有可能會導致索引的建立失敗,所以這種操作適合在系統(tǒng)使用量比較小的時候使用,例如在執(zhí)行定時任務的時候,或者深夜需要更新或插入大量數(shù)據(jù)的時候去做。
索引會導致插入或者更新慢的原因:因為索引是需要維護的當數(shù)據(jù)越大,索引需要維護的量越大,而這個維護的操作需要的代價是很高的,所以上面的操作可以使大批量的新增或者更新有了飛的提升。(其實,這個實驗是源于我們公司有個需求是每天在一個時間需要進行大批量的插入和更新,本來是有這樣的操作,但是公司請了一個DBA之后,DBA覺得這個操作是沒有必要的,當時又沒有人知道這個操作是為了什么,就讓我們?nèi)サ暨@個操作,在他們私下討論中我偶然聽到說我們開發(fā)水平低,對于數(shù)據(jù)庫的機制不了解,所以才有這些沒用的操作,我就很不服,所以才有了以上的實驗)
這些觀點只代表自己觀點,本人寫的東西只是自己在工作或者生活中遇到的問題和大家分享一下,方便自己和大家的查閱,目前博客主要更新兩大類。在用微服務中遇到的問題,技術(shù)的整理和數(shù)據(jù)庫優(yōu)化方面。以后還會增加其他板塊。如有錯誤的地方請聯(lián)系博主會及時更正。
http://www.cnblogs.com/Caucasian/p/7108493.html