SQL - 创建索引



索引是快速检索 SQL 数据库中数据的有效方法。它是一个数据库对象,引用存储在表中的数据,从而显著提高数据库的查询和应用程序性能。

SQL 中的索引过程类似于书籍中的索引:它是一种表形式的数据库对象,包含数据位置的详细信息,并拥有单独的存储空间。

尽管索引有助于加快搜索查询速度,但用户无法直接看到这些索引的运行情况。

什么是 SQL 索引?

SQL 索引是一个特殊的查找表,有助于有效地搜索或查询数据库表以检索所需数据。例如,当我们尝试使用连接从多个表检索数据时,索引可以提高查询性能。

随着数据量的增长,索引用于优化任何关系数据库管理系统 (RDBMS) 的查询性能。因此,建议将其用于频繁查询的大型数据库表。

创建 SQL 索引

可以使用CREATE INDEX语句在 SQL 数据库中表的单个或多个列上创建索引。

语法

以下是 SQL 中CREATE INDEX语句的语法:

CREATE INDEX index_name 
ON table_name (column_name1, column_name2,... column_nameN);

这里:

  • index_name 指定要创建的索引的名称。
  • table_name 指定要创建索引的表的名称。
  • (column_name1, column_name2...column_nameN) 是正在创建索引的一个或多个列的名称。

示例

要在数据库表上创建索引,我们首先需要创建一个表。因此,在此示例中,我们使用以下查询创建一个名为CUSTOMERS的表:

CREATE TABLE CUSTOMERS(
   ID INT NOT NULL,
   NAME VARCHAR(15) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS VARCHAR(25),
   SALARY DECIMAL(10, 4),
   PRIMARY KEY(ID));
);

然后,使用以下查询将一些值插入 CUSTOMERS 表中:

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', '32', 'Ahmedabad', 2000),
(2, 'Khilan', '25', 'Delhi', 1500),
(3, 'Kaushik', '23', 'Kota', 2000),
(4, 'Chaitali', '25', 'Mumbai', 6500),
(5, 'Hardik','27', 'Bhopal', 8500),
(6, 'Komal', '22', 'Hyderabad', 9000),
(7, 'Muffy', '24', 'Indore', 5500);

创建表后,使用以下查询为 CUSTOMERS 表中名为NAME的列创建索引:

CREATE INDEX index_name ON CUSTOMERS(NAME);

输出

执行上述查询后,将获得如下输出:

Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

验证

以下 SHOW INDEX 查询用于显示在现有表上创建的所有索引。

SHOW INDEX FROM CUSTOMERS;

在获得的列表中,您可以找到列名 NAME,以及索引列表中的 ID。

非唯一 键名 索引中的序列 列名
客户 0 主键 1 ID
客户 1 index_name 1 NAME

在多个字段上创建索引

我们还可以使用 CREATE INDEX 语句在表的多个字段(或列)上创建索引。为此,您只需要传递要创建索引的列的名称。

示例

让我们考虑前面创建的 CUSTOMERS 表,而不是创建一个新表。在这里,我们使用以下查询在NAMEAGE列上创建索引:

CREATE INDEX mult_index_data on CUSTOMERS(NAME, AGE);

输出

执行上述查询后,将获得如下输出:

Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

验证

现在,让我们使用以下 SHOW INDEX 查询列出在 CUSTOMERS 表上创建的所有索引:

SHOW INDEX FROM CUSTOMERS;

正如您所看到的,您可以在索引列表中找到列名 NAME 和 AGE 以及 ID(主键)。

非唯一 键名 索引中的序列 列名
客户 0 主键 1 ID
客户 1 index_name 1 NAME
客户 1 mult_index_data 1 NAME
客户 1 mult_index_data 2 AGE
广告