首批通过分布式安全可靠测评,为关键业务系统打造
创建索引
更新时间:2026-06-09 13:11:34
您可以通过 CREATE INDEX 语句为表创建索引。
OceanBase 数据库支持在非分区表和分区表上创建索引,索引可以是局部索引或全局索引,也可以是唯一索引或普通索引。如果是分区表的唯一索引,则局部的唯一索引必须包含表分区的分区键。
本节主要介绍如何在非分区表上创建索引,分区表上索引的创建请参见 创建索引 章节。
创建索引的 SQL 语法格式如下:
CREATE [UNIQUE] INDEX index_name ON table_name ( column_list ) [LOCAL | GLOBAL] [ PARTITION BY column_list PARTITIONS N ] ;
字段解释如下:
UNIQUE:代表唯一索引。table_name:表名,指需要创建索引的表。column_list:指出对哪些列进行索引,多列时各列之间用逗号分隔。LOCAL:局部索引。MySQL 模式中在创建索引时如果不显式指定GLOBAL或LOCAL,则默认是LOCAL。GLOBAL:全局索引。PARTITION BY column_list PARTITIONS N:指定分区方式及类型。
说明
索引名称在表范围内不能重复,查看索引可以通过命令
SHOW INDEX。
新增索引还有一种方法,其 SQL 语法格式如下:
ALTER TABLE table_name
ADD INDEX|KEY index_name ( column_list ) ;
该语句可以一次增加多个索引,索引关键字用 INDEX 或 KEY 都可以。
说明
暂不支持倒叙索引。比如:
CREATE INDEX idx ON test (c1, c2 DESC);,会报错Not supported feature or function
示例:为非分区表创建普通索引。
obclient> CREATE TABLE test (c1 int primary key, c2 VARCHAR(10));
Query OK, 0 rows affected
obclient> CREATE INDEX idx ON test (c1, c2);
Query OK, 0 rows affected
obclient> SHOW INDEX FROM test;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-----------+---------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-----------+---------------+---------+
| test | 0 | PRIMARY | 1 | c1 | A | NULL | NULL | NULL | | BTREE | available | | YES |
| test | 1 | idx | 1 | c1 | A | NULL | NULL | NULL | | BTREE | available | | YES |
| test | 1 | idx | 2 | c2 | A | NULL | NULL | NULL | YES | BTREE | available | | YES |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-----------+---------------+---------+
3 rows in set
字段解释如下:
Seq_in_index:索引中的列序列号,一个是1一个是2,就是表明在联合索引中的顺序。Column_name:索引的列名。Non_unique:如果索引不能包括重复值则为0,如果可以则为1。也就是平时所说的唯一索引。Collation:指的是列以什么方式存储在索引中。Cardinality:是基数的意思,表示索引中唯一值的数目的估计值。Sub_part:前置索引的意思,如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。Packed:指示关键字如何被压缩。如果没有被压缩,则为NULL。Index_type:表示索引类型。