SQL 索引

2025年2月12日 | 阅读 5 分钟
  • 索引是特殊的查找表。它用于非常快速地从数据库中检索数据。
  • 索引用于加速 SELECT 查询和 WHERE 子句。但它会降低 INSERT 和 UPDATE 语句的数据输入速度。索引可以创建或删除,而不会影响数据。
  • 数据库中的索引就像书末的索引一样。
  • 例如: 当您引用书中讨论某个主题的所有页面时,您首先必须参考索引,该索引按字母顺序列出所有主题,然后引用一个或多个特定页码。
  • DBMS 引擎使用 ROWID 来查找行在数据库中的物理位置。它具有以下格式:

OOOOOOFFFBBBBBBBRRR

在上表中:

  • OOOOOO: 数据对象编号,用于标识数据库对象。
  • FFF: 数据库中包含行的表空间相对数据文件编号。
  • BBBBBBB: 表示包含行的数据库块。
  • RRR: 块中的行号。

1. 创建索引语句

用于在表上创建索引。它允许重复值。

语法

在上面的语句中:

  • index_name 是索引的名称
  • table_name 是创建索引的表名称
  • 用于创建索引的列。

示例

说明

执行上述查询后,它将在 (LastName, FirstName) 列上创建一个名为 idx_name 的索引。结果是 SQL 会对表进行完全扫描,以从每个记录中检索这两个列,并按字母升序对其进行排序。此排序发生在内存中。

在索引中搜索特定值的步骤如下:

  • 要搜索索引中的特定值,首先从根块开始。
  • 然后搜索块键,找到大于或等于搜索值的最小键。
  • 找到键后,如果键大于查找值,则沿该键之前的子块链接;否则,沿该块中最高键之后的链接。
  • 如果子块是分支块,则重复步骤 2 和 3。
  • 搜索与搜索值相等的叶子块。如果找到键,则返回 ROWID,否则行不存在。

2. 唯一索引语句

用于在表上创建唯一索引。它不允许重复值。

创建唯一索引的语法如下:

示例

说明

执行上述查询后,它将在 (site_name) 列上创建一个名为 websites_idx 的唯一索引。

复合索引

复合索引可用于在表中的多个列上创建索引。它们可以按任何顺序出现,并且不必在表中相邻。创建复合索引时,最多只能使用 32 列。

创建复合索引的语法如下:

示例

说明

执行上述查询后,它将在 (site_name,domain) 列上创建一个名为 com_websites_idx 的复合索引。

ALTER INDEX 语句

如果要更改表索引,可以使用 ALTER INDEX 语句轻松修改。

ALTER 索引的语法如下:

示例

说明

执行上述查询后,ALTER 语句将重建索引。

RENAME INDEX 语句

如果要重命名表索引,可以使用 ALTER RENAME 语句轻松重命名表索引。

重命名索引的语法如下:

示例

说明

执行上述查询后,它将把 idx_name 重命名为 websites。

3. DROP INDEX 语句

当不再需要索引或该索引未对针对指定表的查询提供预期的性能改进时,您可以使用 DROP INDEX 命令删除索引。

删除索引的语法如下:

示例

说明

执行上述查询后,它将删除名为 websites_idx 的唯一索引。

创建 SQL 索引的规则

以下是创建索引时应遵守的规则列表。

  • 索引只能为表创建,不能为视图创建。
  • 表上的索引数量不应过多,因为更多的索引会增加每次更改表时产生的开销。当插入或删除行时,表上的所有索引也必须更新。因此,许多索引会降低性能。
  • 最好使用主键和唯一键约束而不是唯一索引,因为 SQL 会自动创建唯一索引。此外,除非声明了相应的PRIMARY KEY约束,否则您将无法声明FOREIGN KEY约束。
  • 索引可以随时创建和删除,而不会影响数据库表和其他索引。

索引的优点

以下是索引的各种优点:

  • 它提供信息非常快速。
  • 它以非常高效的方式存储数据。
  • 它保证数据的唯一性。

索引的缺点

以下是索引的各种缺点:

  • 它需要额外的内存空间。
  • 索引会降低 INSERT、UPDATE 和 DELETE 等操作的性能。

SQL 索引选择题

1. 重命名 SQL 索引的正确语句是?

  1. ALTER INDEX old_Index_Name RENAME new_Index_Name;
  2. ALTER INDEX old_Index_Name TO new_Index_Name;
  3. old_Index_Name RENAME TOnew_Index_Name;
  4. ALTER INDEX old_Index_Name RENAME TO new_Index_Name;

答案:d

说明

以下语句是重命名 SQL 索引的正确语句。

ALTER INDEX old_Index_Name RENAME TO new_Index_Name;


2. 创建 UNIQUE SQL 索引的正确语句是?

  1. CREATE UNIQUE INDEX index_name table_name (column1..column_n);
  2. INSERT UNIQUE INDEX index_name ON table_name (column1..column_n);
  3. CREATE UNIQUE INDEX index_name ON table_name (column1..column_n);
  4. CREATE INDEX index_name ON table_name (column1..column_n);

答案:c

解释: 以下语句用于创建 SQL 索引。

CREATE UNIQUE INDEX index_name ON table_name (column1..column_n);


3. 在以下 SQL 索引列表中,哪一个不是索引的类型?

  1. UNIQUE INDEX
  2. COMPOSITE INDEX
  3. NON UNIQUE INDEX
  4. NON COMPOSITE INDEX

答案:d

解释: SQL 索引基本有 3 种类型

  • UNIQUE INDEX
  • NON UNIQUE INDEX
  • COMOPSITE INDEX

4. 索引是为……创建的?

  1. 视图
  2. 表和视图均可
  3. 均不可

答案:a

解释: 索引只能为表创建,不能为视图创建。


5. 复合索引的目的是什么?

  1. 在表中为 1 列创建索引
  2. 在表中为多列创建索引
  3. 不创建任何索引
  4. 在表中为最多几百列创建索引

答案:b

解释: 复合索引可用于在表中的多个列上创建索引。


下一主题DBMS SQL 子查询