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