首批通过分布式安全可靠测评,为关键业务系统打造
索引简介
更新时间:2026-04-12 20:29:13
索引也叫二级索引,是一种可选的结构,用户可以根据自身业务的需求,来决定在某些字段创建索引,从而加快在这些字段的查询速度。本章节主要介绍使用索引的优点和缺点、索引的可用性和可见性以及索引和键的关系。
OceanBase 数据库采用的聚集索引表模型,对于用户指定的主键会自动生成主键索引,而对于用户创建的其他索引,则是二级索引。
如下例所示,创建表 EMPLOYEE,并插入三组数据。
obclient> CREATE TABLE EMPLOYEE(id INT, name VARCHAR(20), PRIMARY KEY(id));
obclient> INSERT INTO EMPLOYEE VALUES(1,'John'),(2,'Alice'),(3,'Bob');
obclient> SELECT * FROM EMPLOYEE;
在 EMPLOYEE 表中,按照用户指定的 id 有序存储数据,在查找数据时,可以根据 id 以二分查询的方式快速定位到具体的数据。如果需要按照 name 字段快速查找,可以在 name 字段建立一个二级索引,如下例所示:
CREATE INDEX IDX_NAME ON EMPLOYEE(name);
索引表中的数据如下:
name: Alice, id: 2
name: Bob, id :3
name: John, id: 1
在索引表 name_index 中,按照 name 字段有序存储,当用户指定 name 字段查询时,能以二分查询的方式快速地定位到具体的数据。
索引的优缺点
索引的优点如下:
用户可以在不修改 SQL 语句的情况下,可以加速查询,只需要扫描用户所需要的部分数据。
索引存储的列数通常较少,可以节省查询 IO。
索引的缺点如下:
选择在什么字段上创建索引需要对业务和数据模型有较深地理解。
当业务发生变化时,需要重新评估以前创建的索引是否满足需求。
写入数据时,需要维护索引表中的数据,消耗一定的性能代价。
索引表会占用内存、磁盘等资源。
索引的可用性和可见性
索引可用性
在 Truncate 分区/删除分区时,OceanBase 数据库会将对应表的所有全局索引进行重建,在重建的过程中,存在失效的时间。
索引可见性
索引的可见性是指优化器是否忽略该索引,如果索引是不可见的,则优化器会忽略该索引,但在 DML 操作中索引是需要维护的。一般在删除索引前,可以先将索引设置成不可见,来观察对业务的影响,如果确认无影响后,再将索引删除。
索引和键的关系
键是指一组列或者表达式,用户可以在键上创建索引。但索引和键是不同的,索引是存储在数据中的对象,而键是逻辑上的概念。
函数索引
基于表中一列或多列的值进行计算后的结果建立的索引称为函数索引。函数索引是一种优化技术,使用函数索引可以在查询时快速定位匹配的函数值,从而避免重复计算,提高查询效率。
列存索引
列存索引是将索引表当中的数据以列存形式存储。OceanBase 数据库支持创建表时指定表的存储格式为列存,索引和数据表一样都是一张表,所以也支持设置索引表中的数据以列存形式存储。
更多有关列存的详细信息,请参见 列存。