索引操作
本文介绍 seekdb 下的简单索引操作,包括创建索引、查看索引、添加索引、删除索引和重命名索引。
创建索引
创建索引有如下两种方法:
-
CREATE INDEX
CREATE [SPATIAL | UNIQUE] INDEX [IF NOT EXISTS] index_name
[USING BTREE] ON table_name (sort_column_key [, sort_column_key... ])
[index_option...] [partition_option];相关参数说明如下:
-
index_name:指定待创建的索引的索引名。 -
table_name:指定待创建索引的表的表名。 -
sort_column_key:指定一个排序列的键,创建索引时可以指定多个排序列,多个排序列使用英文逗号(,)分开。 -
index_option:指定索引选项,创建索引时可以指定多个索引选项,多个索引选项使用英文空格分开。 -
partition_option:指定创建索引分区的选项。
详细语法介绍可参见 CREATE INDEX。
在创建某表的索引时,该表仍可用于读写和 写入操作。创建索引的示例如下。
-
假设数据库中已有表 t1,在 t1 表上创建一个名为 index1 的索引,并指定该索引在 c1 列上按升序进行排序。
CREATE INDEX index1 ON t1 (c1 ASC); -
假设数据库中已有表 t2,在 t2 表上创建一个名为 index2 的索引,并指定 c1+c2 作为索引表达式。
CREATE INDEX IF NOT EXISTS index2 ON t2 (c1 + c2);
-
-
CREATE TABLE
CREATE TABLE [IF NOT EXISTS] table_name
(column_name column_definition,[column_name column_definition,...],
{INDEX | KEY} [index_name] [index_type] (key_part,...)
[index_option...]);相关参数说明如下:
-
table_name:指定待创建的表的表名。 -
column_name:指定表的列。 -
column_definition:定义表中各列对应的数据类型。 -
INDEX | KEY:表示在该语句中,索引关键字使用 INDEX 或 KEY 都可以。 -
index_name:可选,指定待创建的索引的索引名。如果未指定,默认索引名与指定的列名相同。 -
index_type:可选,指定索引类型。 -
key_part:创建(函数)索引。 -
index_option:指定索引选项,指定多个index_option时使用空格隔开。
详细语法介绍可参见 CREATE TABLE。
此处以在数据库中创建
t3表的同时创建索引index3,并指定index3在id列上按升序排列为例,执行命令如下:CREATE TABLE t3
(id int,
name varchar(50),
INDEX index3 (id ASC)); -
查看索引
您可执行 SHOW INDEX 语句查看表的索引,查看表 test 上的索引示例如下:
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 | Expression |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-----------+---------------+---------+------------+
| test | 0 | PRIMARY | 1 | id | A | NULL | NULL | NULL | | BTREE | available | | YES | NULL |
| test | 1 | index1 | 1 | name | A | NULL | NULL | NULL | | BTREE | available | | YES | NULL |
| test | 1 | index2 | 1 | age | A | NULL | NULL | NULL | | BTREE | available | | YES | NULL |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-----------+---------------+---------+------------+
查询结果中的相关字段说明如下:
-
Non_unique:如果索引不能包括重复值则为0,如果可以则为1。也就是通常所说的唯一索引。 -
Key_name:索引名。 -
Seq_in_index:索引中的列序列号,1或者2,用于表明该索引在联合索引中的顺序。 -
Column_name:索引的列名。 -
Collation:表示列以什么方式存储在索引中。 -
Cardinality:基数的意思,表示索引中唯一值的数目的估计值。 -
Sub_part:前缀索引,如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。 -
Packed:指示关键字如何被压缩。如果没有被压缩,则为NULL。 -
Index_type:表示索引类型。当前仅支持BTREE类型。 -
Comment:表示该索引是否可用。 -
Index_comment:该索引的注释信息。 -
Visible:表示该索引是否可见。
添加索引
添加索引的语法如下:
ALTER TABLE table_name ADD {INDEX | KEY} index_name [index_type] (key_part,...) [index_option];
相关参数说明如下:
-
table_name:指定待添加索引的表的表名。 -
INDEX | KEY:表示在该语句中,索引关键字使用 INDEX 或 KEY 都可以。 -
index_name:指定待创建的索引的索引名。 -
index_type:可选,指定索引类型。 -
key_part:创建(函数)索引。 -
index_option:指定索引选项,指定多个index_option时使用空格隔开。
详细的语法介绍可参见 ALTER TABLE。
此处假设数据库中已有表 t1,在表 t1 上添加一个名为 index2 的索引,并指定该索引在 c2 和 c3 列上按升序进行排序,执行示例如下:
ALTER TABLE t1 ADD INDEX index2 (c2,c3 ASC);
删除索引
删除索引的语法包括如下两种:
-
DROP INDEX
DROP INDEX index_name ON table_name;其中,
index_name指定待删除的索引的索引名;table_name指定待删除索引的表的表名。详细的语法介绍可参见 DROP INDEX。 -
ALTER TABLE
ALTER TABLE table_name DROP {INDEX | KEY} index_name;相关参数说明如下:
-
table_name指定待删除索引的表的表名。 -
INDEX | KEY表示在该语句中,索引关键字使用INDEX或KEY都可以。 -
index_name指定待删除的索引的索引名。
详细的语法介绍可参见 ALTER TABLE。
-
在删除某表的索引时,该表仍可用于读取和写入操作。
此处假设数据库中已有表 t1,并在表 t1 上存在 index1 索引,删除索引的示例如下:
-
DROP INDEX
DROP INDEX index1 ON t1; -
ALTER TABLE
ALTER TABLE t1 DROP INDEX index1;
重命名索引
重命名索引的语法如下:
ALTER TABLE table_name RENAME {INDEX | KEY} old_index_name TO new_index_name;
相关参数说明如下:
-
table_name:指定待重命名的索引所在表的表名。 -
INDEX | KEY:表示在该语句中,索引关键字使用INDEX或KEY都可以。 -
old_index_name:指定待重命名的索引的索引名。 -
new_index_name:指定重命名后索引的索引名。
详细的语法介绍可参见 ALTER TABLE。
此处假设数据库中已有表 t1,并在表 t1 上存在名为 index2 的索引,将索引 index2 重命名为 index3,执行示例如下:
ALTER TABLE t1 RENAME INDEX index2 TO index3;