1. 对象(索引)能力概述
先来看看各家数据库产品在索引能力的大致表现如何。限于宽度,这里拆分为两个表格。
1.png
2.png
2. 对象(索引)能力详解
1).索引类型
随着数据库对数据模式的支持不断丰富及使用场景的更加多元,更多索引类型的支持成为必然。除了传统的B+树索引外,正有更多的索引类型被主持。下面列举了一些索引类型及使用的场景等。当然从实际使用来看,传统B+树仍然为主流,也是被大家广泛使用的。从国产数据库支持情况来看,差异较大;PG系产品相对有一定优势,支持了更为丰富的索引类型。
3.png
2).索引结构与存储
索引在存储结构通常采用的是B+树的结构,根据索引类型的不同,也有采用其他结构的。在存储组织格式上,聚集与非聚集索引页都有存在,一般数据库也都支持两种方式。
4.png
3).索引对象
针对索引对象,不同数据库差异较大。除了通常意义针对字段值进行索引外,还有数据库支持字段值的反转后进行索引,这将有利于消除热点。有些数据库还支持对表达式、函数进行索引,这无疑增加了索引的适应场景。此外,还有数据库支持对部分字段值(如前缀)或部分记录进行索引。
4).分区索引
索引对分区能力的支持,是在应对大数据量情况下的关键技术。从个人过去的使用来看,通常慎选全局索引,而尽量选择代价较低的本地索引。从国产数据库来看,也都支持了这两种类型,除了MySQL对此能力相对较弱外,其他都差不多。这里差异主要体现在分区索引维护上面。
5.png
5).索引优化
索引能否发挥更大作用,取决于优化器能能否充分地利用索引。这里有一些常见的优化手段,包括索引覆盖扫描、索引条件下推、索引跳跃扫描等等。这里稍微吐槽下,国内数据库这部分介绍的不多,搜索也得不到有用的信息,因此可能信息不够完整。
6).索引维护与开发
针对运维层面,索引会带来部分工作,例如定期监控索引的状态、使用情况等。如数据库提供了良好的可观察性和便捷的维护方式会带来很大收益。针对开发层面,一方面如何使用好索引,另一方面则是针对当前情况能给出一些索引建议。这两点,Oracle做得相对完善,国产数据库还有一定距离。