國(guó)產(chǎn)集中式數(shù)據(jù)庫(kù)對(duì)象評(píng)測(cè) — 索引
原創(chuàng)1. 對(duì)象(索引)能力概述
先來(lái)看看各家數(shù)據(jù)庫(kù)產(chǎn)品在索引能力的大致表現(xiàn)如何。限于寬度,這里拆分為兩個(gè)表格。
1.png
2.png
2. 對(duì)象(索引)能力詳解
1).索引類型
隨著數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)模式的支持不斷豐富及使用場(chǎng)景的更加多元,更多索引類型的支持成為必然。除了傳統(tǒng)的B+樹(shù)索引外,正有更多的索引類型被主持。下面列舉了一些索引類型及使用的場(chǎng)景等。當(dāng)然從實(shí)際使用來(lái)看,傳統(tǒng)B+樹(shù)仍然為主流,也是被大家廣泛使用的。從國(guó)產(chǎn)數(shù)據(jù)庫(kù)支持情況來(lái)看,差異較大;PG系產(chǎn)品相對(duì)有一定優(yōu)勢(shì),支持了更為豐富的索引類型。
3.png
2).索引結(jié)構(gòu)與存儲(chǔ)
索引在存儲(chǔ)結(jié)構(gòu)通常采用的是B+樹(shù)的結(jié)構(gòu),根據(jù)索引類型的不同,也有采用其他結(jié)構(gòu)的。在存儲(chǔ)組織格式上,聚集與非聚集索引頁(yè)都有存在,一般數(shù)據(jù)庫(kù)也都支持兩種方式。
4.png
3).索引對(duì)象
針對(duì)索引對(duì)象,不同數(shù)據(jù)庫(kù)差異較大。除了通常意義針對(duì)字段值進(jìn)行索引外,還有數(shù)據(jù)庫(kù)支持字段值的反轉(zhuǎn)后進(jìn)行索引,這將有利于消除熱點(diǎn)。有些數(shù)據(jù)庫(kù)還支持對(duì)表達(dá)式、函數(shù)進(jìn)行索引,這無(wú)疑增加了索引的適應(yīng)場(chǎng)景。此外,還有數(shù)據(jù)庫(kù)支持對(duì)部分字段值(如前綴)或部分記錄進(jìn)行索引。
4).分區(qū)索引
索引對(duì)分區(qū)能力的支持,是在應(yīng)對(duì)大數(shù)據(jù)量情況下的關(guān)鍵技術(shù)。從個(gè)人過(guò)去的使用來(lái)看,通常慎選全局索引,而盡量選擇代價(jià)較低的本地索引。從國(guó)產(chǎn)數(shù)據(jù)庫(kù)來(lái)看,也都支持了這兩種類型,除了MySQL對(duì)此能力相對(duì)較弱外,其他都差不多。這里差異主要體現(xiàn)在分區(qū)索引維護(hù)上面。
5.png
5).索引優(yōu)化
索引能否發(fā)揮更大作用,取決于優(yōu)化器能能否充分地利用索引。這里有一些常見(jiàn)的優(yōu)化手段,包括索引覆蓋掃描、索引條件下推、索引跳躍掃描等等。這里稍微吐槽下,國(guó)內(nèi)數(shù)據(jù)庫(kù)這部分介紹的不多,搜索也得不到有用的信息,因此可能信息不夠完整。
6).索引維護(hù)與開(kāi)發(fā)
針對(duì)運(yùn)維層面,索引會(huì)帶來(lái)部分工作,例如定期監(jiān)控索引的狀態(tài)、使用情況等。如數(shù)據(jù)庫(kù)提供了良好的可觀察性和便捷的維護(hù)方式會(huì)帶來(lái)很大收益。針對(duì)開(kāi)發(fā)層面,一方面如何使用好索引,另一方面則是針對(duì)當(dāng)前情況能給出一些索引建議。這兩點(diǎn),Oracle做得相對(duì)完善,國(guó)產(chǎn)數(shù)據(jù)庫(kù)還有一定距離。