索引在数据库中发挥着关键作用。它们就像书中的索引一样,允许你在书中搜索和定位各种项目和主题。数据库中的索引也有类似的作用,有助于加快数据库中存储记录的搜索速度。本文将解释在SQL Server中创建集群索引的方法。
索引在数据库中起着关键作用。它们就像书中的索引一样,允许你在书中搜索和定位各种项目和主题。数据库中的索引也有类似的作用,有助于加快数据库中存储的记录的搜索速度。
聚类索引是SQL Server中的索引类型之一。它被用来定义数据在表中的存储顺序。它的工作原理是对表中的记录进行排序,然后将其存储起来。
在本教程中,你将了解表的聚类索引以及如何在SQL Server中定义聚类索引。
SQL Server聚类索引
在了解如何在SQL Server中创建一个聚类索引之前,让我们先了解一下索引的工作原理。
考虑下面的示例查询,用一个基本结构创建一个表:
CREATE DATABASE product_inventory;
USE product_inventory;
CREATE TABLE inventory (
id INT NOT NULL,
product_name VARCHAR(255),
price INT,
quantity INT
);
接下来,向表中插入一些样本数据,如下面的查询所示
INSERT INTO inventory(id, product_name, price, quantity) VALUES
(1, 'Smart Watch', 110.99, 5),
(2, 'MacBook Pro', 2500.00, 10),
(3, 'Winter Coats', 657.95, 2 ),
(4, 'Office Desk', 800.20, 7),
(5, 'Soldering Iron', 56.10, 3),
(6, 'Phone Tripod', 8.95, 8 );
上面的示例表没有在其列中定义主键约束。因此,SQL Server将记录存储在一个无序的结构中。这个结构被称为 "堆"。
假设你需要执行一个查询来定位表中的一个特定行?在这种情况下,它将迫使SQL Server扫描整个表来定位匹配的记录。
例如,考虑一下这个查询
SELECT * FROM inventory WHERE quantity = 8;
如果你在SSMS中使用估计的执行计划,你会发现这个查询扫描了整个表来定位一条记录。

虽然在上述的小数据库中,性能几乎不明显,但在有大量记录的数据库中,查询可能需要更长的时间来完成。
解决这种情况的方法是使用一个索引。在SQL Server中有各种类型的索引。然而,我们将主要关注聚类索引。
如前所述,聚类索引以排序的形式存储数据。一个表可以有一个聚类索引,因为我们只能以一种逻辑顺序对数据进行排序。
一个聚类索引使用B树结构来组织和排序数据。这使你能够执行插入、更新、删除和更多操作。
注意在前面的例子中,该表没有主键。因此,SQL Server不创建任何索引。
然而,如果你创建一个有主键约束的表,SQL Server会自动从主键列创建一个聚类索引。
看看当我们创建带有主键约束的表时会发生什么。
CREATE TABLE inventory (
id INT NOT NULL PRIMARY KEY,
product_name VARCHAR(255),
price INT,
quantity INT
);
如果你重新运行选择查询并使用估计的执行计划,你会看到查询使用了一个聚类索引,如:
SELECT * FROM inventory WHERE quantity = 8;

在SQL Server Management Studio上,你可以通过扩展索引组来查看一个表的可用索引,如图所示

当你向一个包含聚类索引的表添加主键约束时,会发生什么?在这种情况下,SQL Server会在一个非聚类索引中应用该约束条件。
SQL Server创建聚类索引
你可以使用SQL Server中的CREATE CLUSTERED INDEX语句创建一个聚类索引。这主要用于目标表没有主键约束的情况。
例如,考虑下面这个表
DROP TABLE IF EXISTS inventory;
CREATE TABLE inventory (
id INT NOT NULL,
product_name VARCHAR(255),
price INT,
quantity INT
);
由于该表没有主键,我们可以手动创建一个聚类索引,如下面的查询所示。
CREATE clustered INDEX id_index ON inventory(id);
上面的查询使用id列在inventory的表上创建了一个名字为id_index的聚类索引。
如果我们在SSMS中浏览索引,我们应该看到id_index为。

总结!
在本指南中,我们探讨了SQL Server中的索引和聚类索引的概念。我们还介绍了如何在数据库表中创建一个聚类键。