跳到主要内容

索引操作

本文介绍 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,并指定 index3id 列上按升序排列为例,执行命令如下:

    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 的索引,并指定该索引在 c2c3 列上按升序进行排序,执行示例如下:

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 表示在该语句中,索引关键字使用 INDEXKEY 都可以。

    • 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:表示在该语句中,索引关键字使用 INDEXKEY 都可以。

  • old_index_name:指定待重命名的索引的索引名。

  • new_index_name:指定重命名后索引的索引名。

详细的语法介绍可参见 ALTER TABLE

此处假设数据库中已有表 t1,并在表 t1 上存在名为 index2 的索引,将索引 index2 重命名为 index3,执行示例如下:

ALTER TABLE t1 RENAME INDEX index2 TO index3;

相关文档