首批通过分布式安全可靠测评,为关键业务系统打造
索引简介
更新时间:2026-07-15 20:42:45
索引是一种可选的结构,用户可以根据自身业务的需求来决定在某些字段创建索引,从而加快在这些字段的查询速度。本文主要介绍使用索引的优点和缺点以及索引的可用性和可见性。
索引的优缺点
索引的优点如下:
用户可以在不修改 SQL 语句的情况下,可以加速查询,只需要扫描用户所需要的部分数据。
索引存储的列数通常较少,可以节省查询 IO。
索引的缺点如下:
选择在什么字段上创建索引需要对业务和数据模型有较深地理解。
当业务发生变化时,需要重新评估以前创建的索引是否满足需求。
写入数据时,需要维护索引表中的数据,消耗一定的性能代价。
索引表会占用内存、磁盘等资源。
索引的可用性和可见性
索引可用性
在 Truncate 分区/删除分区时,OceanBase 数据库会将对应表的所有全局索引进行重建,在重建的过程中,存在失效的时间。
索引可见性
索引的可见性是指优化器是否忽略该索引,如果索引是不可见的,则优化器会忽略该索引,但在 DML 操作中索引是需要维护的。一般在删除索引前,可以先将索引设置成不可见,来观察对业务的影响,如果确认无影响后,再将索引删除。
索引和键的关系
键是指一组列或者表达式,用户可以在键上创建索引。但索引和键是不同的,索引是存储在数据库中的对象,而键是逻辑上的概念。
索引类型
全局索引和局部索引
全局索引
全局索引是在整个表中创建的索引,可以包含表的所有分区的数据。全局索引适用于跨分区进行查询的场景。
局部索引
局部索引是在每个分区中创建的索引,仅包含该分区的数据。局部索引适用于在分区内部进行查询的场景。
唯一索引和非唯一索引
唯一索引
唯一索引要求索引列的值在索引中是唯一的,每个索引值只能对应一条记录。唯一索引用于确保表中某个字段的唯一性。
非唯一索引
非唯一索引允许索引列中存在重复的值,即可以有多个索引值对应一条或多条记录。非唯一索引用于加速对索引列的查询,无法保证索引列的唯一性。
空间索引
空间索引是一种用于加速空间数据的查询的特殊索引类型,主要应用于地理信息系统(GIS)和空间数据处理领域。空间索引可以支持对空间对象(如点、线、面)进行高效的查询和空间关系分析。
函数索引
基于表中一列或多列的值进行计算后的结果建立的索引称为函数索引。函数索引是一种优化技术,使用函数索引可以在查询时快速定位匹配的函数值,从而避免重复计算,提高查询效率。
列存索引
列存索引是将索引表当中的数据以列存形式存储。OceanBase 数据库从 V4.3.0 版本开始支持创建表时指定表的存储格式为列存,索引和数据表一样都是一张表,所以也支持设置索引表中的数据以列存形式存储。
更多有关列存的详细信息,请参见 列存。
多值索引
注意
对于 V4.3.5 BP3 版本,暂不支持创建列存多值索引。
OceanBase 数据库的 MySQL 模式支持多值索引功能,这对于 JSON 文档和其他集合数据类型特别有用。利用这项功能可以在数组或集合上创建索引,从而提高基于 JSON 数组元素进行搜索的查询效率。
在当前版本中,可以在 CREATE TABLE 语句中创建多值索引。这涉及在索引定义中应用 CAST(... AS ... ARRAY) 语句,将 JSON 数组内相同类型的标量值转换为 SQL 数组类型。这一操作将创建一个虚拟列,该列自动填充 SQL 数组类型的值;紧接着,该虚拟列上会创建一个函数索引(也称为虚拟索引)。多值索引即是建立在虚拟列之上的,该列从 SQL 数组中提取值。
多值索引的特性描述
影响多值索引的 DML 操作与影响普通索引的 DML 操作处理方式相同,唯一的区别是单个聚簇索引记录可能会有多次插入或更新。
可空性和多值索引:
- 如果多值键部分有一个空数组,则不会添加条目到索引中,数据记录不能通过索引扫描访问。
- 如果类型化数组列被设置为 NULL,则存储引擎存储一个包含 NULL 且指向数据记录的单条目。
由于多值索引是虚拟列上的虚拟索引,所以必须遵守同虚拟生成列上的辅助索引相同的规则。
对于已创建包含多值索引的主表,支持复杂 DML 操作。
多值索引支持后建,即先创建主表,再创建多值索引。
更多有关多值索引的详细信息,请参见 多值索引。
全文索引
注意
对于 V4.3.5 BP3 版本,暂不支持创建列存全文索引。
全文索引是一种用于快速搜索文本数据的技术,它能够对文本内容进行全面的索引和检索。全文索引可以索引整个文档或大段的文本内容,它的主要功能是实现全文搜索,即根据用户输入的关键词在数据库中快速查找匹配的文本。它能够处理大量的文本数据,包括文章、报告、网页、电子邮件等。
更多有关全文索引的详细信息,请参见 全文索引。
相关文档
- 多值/全文索引对 Offline DDL 的支持情况请见Offline DDL。