十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
這篇文章將為大家詳細(xì)講解有關(guān)PostgreSQL中BRIN索引指的是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)專注于海北州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供海北州營(yíng)銷型網(wǎng)站建設(shè),海北州網(wǎng)站制作、海北州網(wǎng)頁(yè)設(shè)計(jì)、海北州網(wǎng)站官網(wǎng)定制、微信平臺(tái)小程序開發(fā)服務(wù),打造海北州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供海北州網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
眾所周知,PostgreSQL 各種插件的數(shù)據(jù)量和他無(wú)底洞的功能豐富性,被使用者所嘆服。而PostgreSQL 有一種索引,BRIN 肯能使用的人不是很多,或許你也可能第一次聽說(shuō)這個(gè)索引的名字。相比 GIST ,GIN 這樣的索引類型,BRIN 的名聲可能稍有差距。那今天我們就來(lái)看看 BRIN 到底能做什么,為什么而生。
我們先創(chuàng)建一個(gè)表
插入一些數(shù)據(jù) (當(dāng)然這些數(shù)據(jù)是針對(duì)Brin 索引的數(shù)據(jù))
我們通過(guò)下面的查詢來(lái)看一下在沒(méi)有索引的情況下查詢時(shí)間類型的數(shù)據(jù)會(huì)怎樣。
從下圖我們可以對(duì)比出,添加索引后和全表掃描之間的cost 差距
從上圖可以看出,添加索引后,查詢的速度提高了,但我們的關(guān)鍵點(diǎn)不在這里,我們是要比較,BTREE 索引 和 BRIN 索引之間的不同點(diǎn)。
我們?cè)谕瑯拥谋淼耐瑯拥淖侄蝿?chuàng)建,不一樣類型的索引。通過(guò)圖形中我們可以看出創(chuàng)建兩種索引的時(shí)間是不一樣的,brin 索引的速度比 BTREE 索引要快大約不到 12倍。
我們?cè)趯?duì)比一下兩種索引的尺寸,看完下圖,我估計(jì)你的嘴應(yīng)該不會(huì)閉上,或許還會(huì)發(fā)出點(diǎn)聲音。的確 BRIN 索引的尺寸是超小的,當(dāng)然也是有原因的。
我們繼續(xù),那這樣小的索引,對(duì)比BTREE 索引,到底查詢的效率是不是可以滿足要求呢?
我們可以看出,在默認(rèn)的情況下,系統(tǒng)會(huì)默認(rèn)使用 BTREE 索引,在兩種索引都存在的情況下。
對(duì)比 BRIN 索引,雖然BRIN 索引比BTREE 索引慢了 些許毫秒,但對(duì)比索引所占用的空間比,BTREE 占用 129MB 而 BRIN 占用 56KB 你就能體會(huì),你第二次長(zhǎng)大的嘴,BRIN 索引真的很厲害。
說(shuō)完上面那些,我們的談?wù)劊降譈RIN 索引是怎么做到的,大幅度降低索引的存儲(chǔ)空間,并且還保證超高的索引查詢中的查詢率。
原因,BRIN 索引是一種有損索引,這個(gè)索引的簡(jiǎn)稱 Block Range Index, 而BRIN 索引產(chǎn)生的主要原因也是為了一些 “超級(jí)大表的索引”,試想一下,你有一張6億條記錄的表,很可能你的索引就是幾個(gè)G ,而這樣的索引在查詢中,其實(shí)隨著數(shù)據(jù)量的增大,性能是線性下降的。
而BRIN 所以存儲(chǔ)的數(shù)據(jù)并不是普通索引那樣的 BTREE 的數(shù)據(jù),而是存儲(chǔ)元祖數(shù)據(jù),以及相關(guān)數(shù)據(jù)的頁(yè)面信息,通過(guò)這些信息,大大減少了存儲(chǔ)數(shù)據(jù)的空間,而在判斷數(shù)據(jù)是否符合條件的情況下,則比BTREE 索引要付出更多的過(guò)濾和對(duì)比的過(guò)程,但相對(duì)他超高的性價(jià)比,對(duì)于大表, 有序型的數(shù)據(jù)的索引的建立,BRIN 索引是值得被考慮和使用的。
當(dāng)然如果有人問(wèn),這里面BRIN 索引是否牽扯類似壓縮比率這樣的事情
pages_per_range ,如果你將每頁(yè)的范圍調(diào)整過(guò)大,則損失就會(huì)越大,所以我們也可以在 “壓縮” 和 準(zhǔn)確度,之間做一個(gè)平衡。
最后我們來(lái)回顧一下,使用BRIN 索引的主要場(chǎng)景和目的
1 大表的索引性能問(wèn)題
2 表中索引的數(shù)據(jù)在表中的字段最好是順序型的,例如日期,或者某些可以順序化的場(chǎng)景(其實(shí)時(shí)序數(shù)據(jù)庫(kù)就符合這樣的類型)
3 對(duì)索引占用空間敏感的場(chǎng)景。
關(guān)于PostgreSQL中BRIN索引指的是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。