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