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