SQL INDEX(索引)

本章将学习如何在表上创建索引,以提高数据库的性能。

索引是什么

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

假设,您的数据库中有一个customers表,要找出名称以字母A开头的所有客户:

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

执行查询时,数据库引擎必须逐行扫描customers表,检查cust_name列的内容。如果表包含数百万行,这个查询可能耗费很长时间。

可以通过对表添加索引来加快查询速度。

创建索引

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

CREATE INDEX index_name ON table_name (column_name);

例如,要在customers表的cust_name列上创建索引,可以使用:

CREATE INDEX cust_name_idx ON customers (cust_name);

默认情况下,索引允许条目重复,并按升序对条目进行排序。如果要生成唯一性的索引,可在CREATE后跟UNIQUE,如下所示:

CREATE UNIQUE INDEX cust_name_idx 
ON customers (cust_name);

在MySQL中,可以查看某个表的索引,如下所示:

SHOW INDEXES FROM customers \G
注意: 用”\G”而不是”;”的作用是:当结果太宽不适合当前窗口,则垂直显示结果而不是以通常的表格形式显示。

创建多列索引

还可以创建跨越多个列的索引。

例如,假设数据库中有一个名为users的表,包含first_namelast_name字段,这些字段经常被查询,那么可以在这两个字段上创建一个多列索引来提高性能,如下所示:

CREATE INDEX user_name_idx ON users (first_name, last_name);

数据库索引可以理解为书籍的目录,可以帮助你快速定位书中的某个章节。

索引的负面效应

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

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

  • 为频繁检索的字段创建索引
  • 不要为很少检索的字段创建索引
  • 为用于连接的字段创建索引,以提高连接查询性能
  • 包含太多空值的字段不宜建索引

此外,小表不需要索引。对于小表,数据库服务器扫描表通常比先查看索引更快。

大多数数据库系统,如MySQL、SQL server等,在创建表时自动为主键和唯一性字段创建索引。

删除索引

下面语句删除索引。

DROP INDEX index_name ON table_name;

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

DROP INDEX cust_name_idx ON customers;

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

警告: 在删除索引之前,你应该清楚在干什么。一般来说,永远不要盲目地创建或删除索引。


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载