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