SQL Server 中的非聚集索引将索引结构与物理存储在表中的数据分开存储。Microsoft 允许您为每个表创建近 999 个非聚集索引。非聚集索引有助于提高查询性能。例如,假设您要按员工销售额(常规报告)检索员工,那么您可以在“销售额”上使用此索引来快速检索记录。
让我向您展示在 SQL Server 中创建非聚集索引会发生什么。例如,如果您有一个包含以下记录的客户表。假设客户键是主键(这意味着是聚集索引),但您必须按年收入检索记录。
在这种情况下,您必须在“年收入”列上创建 SQL Server 非聚集索引。它将把年收入记录连同行地址一起存储在单独的位置。
当您查询收入为 79000 的客户记录时,它会在第二个表中查找 79000,找到记录后,它会检查行地址。其次,它会检索该行地址处的记录(从第一个表中)。

在本章中,我们将向您展示如何使用 Transact Query 和 Management Studio 在 SQL Server 中创建和删除非聚集索引。

在 SQL Server 中创建非聚集索引
此示例说明如何添加到现有表。语法是
CREATE NONCLUSTERED INDEX Index_Name ON Table_Name (Column_Name(s) ASC/DESC)
它将在客户记录表的“年收入”列上创建非聚集索引。
-- Create Non Clustered Indexes CREATE NONCLUSTERED INDEX IX_CustomerRecord_YearlyIncome ON CustomerRecord ([Yearly Income] ASC)
Messages
--------
Command(s) completed successfully.
让我使用 sp_helpindex 存储过程来检查客户记录表上的索引。
EXECUTE SP_HELPINDEX CustomerRecord
如您所见,“年收入”列具有非聚集索引。

您还可以使用 SP_HELP 存储过程在 SQL Server 中检查相同的信息。
EXECUTE SP_HELP CustomerRecord
它显示了表的所有信息。

在 SQL Server 中创建复合非聚集索引
您可以在多个列上创建它。因此,您可以将其指向多个列。在此示例中,我们将在“专业”和“年收入”列上添加复合非聚集索引。
CREATE NONCLUSTERED INDEX IX_CustomerRecord_ProfessionIncome ON CustomerRecord ([Profession] DESC, [Yearly Income] ASC)
Messages
--------
Command(s) completed successfully.
现在您可以看到它们。

创建多个非聚集索引
它允许您为每个表创建多个非聚集索引。在此示例中,我们正在向“专业”列添加一个,向“年收入”列添加另一个。
CREATE NONCLUSTERED INDEX IX_CustomerRecord_Profession ON CustomerRecord ([Profession] ASC) CREATE NONCLUSTERED INDEX IX_CustomerRecord_Income ON CustomerRecord ([Yearly Income] DESC)
Messages
--------
Command(s) completed successfully.
现在您可以看到多个。

在 SQL Server Management Studio 中创建非聚集索引
让我向您展示如何使用 Management Studio 创建和删除它
使用对象资源管理器
此示例说明如何使用 Management Studio 创建非聚集索引。
为此,请转到对象资源管理器并展开“数据库”文件夹。接下来,请展开要创建的表,右键单击“索引”文件夹将打开上下文菜单。请选择“新建”,然后选择“非聚集”。

选择选项后,将打开一个新窗口,如下所示。请根据您的要求更改名称。

单击“添加”按钮,然后选择要指定的列名。目前,我们选择“姓氏”列。

请更改排序顺序。

现在您可以看到它

使用表设计器
请展开需要创建的表,右键单击它将打开上下文菜单。接下来,请选择“设计”选项以在设计器窗口中打开表。
接下来,右键单击列并选择“设置索引/键…”选项。

请单击“添加”按钮以添加新索引。选择“添加”选项后,SSMS 将为您创建一个索引。

接下来,单击“列”选项旁边的“浏览”按钮以更改列。接下来,我们选择“职业”作为列名,选择“降序”作为排序顺序。

在表设计器下,请将“创建为聚集索引”选项更改为“否”。

查看新创建的索引

在 SQL Server 中删除非聚集索引
请使用 DROP INDEX 语句删除。
DROP INDEX CustomerRecord.IX_CustomerRecord_Profession
Messages
--------
Command(s) completed successfully.
使用 Management Studio 示例
在对象资源管理器中,展开“数据库”文件夹并选择其中包含索引的表。接下来,展开“索引”文件夹,右键单击名称将打开上下文菜单。请选择“删除”选项。

选择“删除”选项后,将打开“删除对象”窗口。单击“确定”以删除非聚集索引。

评论已关闭。