SQL 基础教程
SQL 连接
SQL 高级教程
SQL 参考资料

SQL CREATE INDEX 语句

在本教程中,您将学习如何在表上创建索引以提高数据库性能。

什么是索引?

索引是与表相关联的一种数据结构,可根据一个或多个列(索引键)中的值提供对表中行的快速访问。

假设您的数据库中有一个 customers 表,并且您想使用以下语句找出名称以字母 A 开头的所有客户。

SELECT cust_id, cust_name, address FROM customers 
WHERE cust_name LIKE 'A%';

要找到这样的客户,服务器必须逐一扫描 customers 表中的每一行并检查名称列的内容。 虽然它适用于只有几行的表,但想象一下如果表包含数百万行,回答查询可能需要多长时间。 在这种情况下,您可以通过对表应用索引来加快速度。

创建索引

您可以使用 CREATE INDEX 语句创建索引:

CREATE INDEX index_name ON table_name (column_name);

例如,要在客户表中的 name 列上创建索引,您可以使用:

CREATE INDEX cust_name_idx ON customers (cust_name);

默认情况下,索引将允许重复条目并按升序对条目进行排序。 要要求唯一的索引条目,请在 CREATE 之后添加关键字 UNIQUE,如下所示:

CREATE UNIQUE INDEX cust_name_idx 
ON customers (cust_name);

在 MySQL 中,您可以查看特定表上的可用索引,如下所示:

mysql> SHOW INDEXES FROM customers \G

提示: 如果 SQL 语句对于当前窗口来说太宽,则使用 \G 而不是 ; 以垂直显示结果而不是正常的表格格式来终止 SQL 语句。


创建多列索引

您还可以构建跨多列的索引。 例如,假设您的数据库中有一个名为 users 的表,其中包含列 first_namelast_name,并且您经常使用这些列访问用户的记录,那么您可以在这两列上一起构建索引以提高性能,如下所示:

CREATE INDEX user_name_idx ON users (first_name, last_name);

提示:您可以将数据库索引视为书籍的索引部分,可帮助您快速查找或定位书中的特定主题。


索引的缺点

应小心创建索引。 因为,每次从表中添加、更新或删除行时,都必须修改该表上的所有索引。 因此,您拥有的索引越多,服务器需要做的工作就越多,最终导致性能下降。

以下是创建索引时可以遵循的一些基本准则:

  • 您经常用于检索数据的索引列。
  • 不要为从不用作检索键的列创建索引。
  • 用于连接以提高连接性能的索引列。
  • 避免包含过多 NULL 值的列。

另外,小表不需要索引,因为在小表的情况下,服务器通常扫描表而不是先看索引会更快。

注意:大多数数据库系统,如 MySQL、SQL server 等,在创建表时会自动为 PRIMARY KEYUNIQUE 列创建索引。


删除索引

您可以使用以下语句删除不再需要的索引。

DROP INDEX index_name ON table_name;

以下语句将从 customers 表中删除索引 cust_name_idx

DROP INDEX cust_name_idx ON customers;

此外,如果您删除一个表,那么所有关联的索引也会被删除。

警告:您应该在删除索引之前彻底调查。 作为经验法则,永远不要盲目地创建或删除索引。

Advertisements