SQL Server 中的非聚集索引

SQL Server 中的非聚集索引将索引结构与物理存储在表中的数据分开存储。Microsoft 允许您为每个表创建近 999 个非聚集索引。非聚集索引有助于提高查询性能。例如,假设您要按员工销售额(常规报告)检索员工,那么您可以在“销售额”上使用此索引来快速检索记录。

让我向您展示在 SQL Server 中创建非聚集索引会发生什么。例如,如果您有一个包含以下记录的客户表。假设客户键是主键(这意味着是聚集索引),但您必须按年收入检索记录。

在这种情况下,您必须在“年收入”列上创建 SQL Server 非聚集索引。它将把年收入记录连同行地址一起存储在单独的位置。

当您查询收入为 79000 的客户记录时,它会在第二个表中查找 79000,找到记录后,它会检查行地址。其次,它会检索该行地址处的记录(从第一个表中)。

Two Tables Data 22

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

Table Data and Definition in Object Explorer 1

在 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

如您所见,“年收入”列具有非聚集索引。

EXECUTE SP_HELPINDEX to View Non Clustered Index in SQL Server 3

您还可以使用 SP_HELP 存储过程在 SQL Server 中检查相同的信息。

EXECUTE SP_HELP CustomerRecord

它显示了表的所有信息。

EXECUTE SP_HELP to get Table Information 4

在 SQL Server 中创建复合非聚集索引

您可以在多个列上创建它。因此,您可以将其指向多个列。在此示例中,我们将在“专业”和“年收入”列上添加复合非聚集索引。

CREATE NONCLUSTERED INDEX IX_CustomerRecord_ProfessionIncome
ON CustomerRecord ([Profession] DESC, [Yearly Income] ASC)
Messages
--------
Command(s) completed successfully.

现在您可以看到它们。

Create Composite Non Clustered Index in SQL Server 8

创建多个非聚集索引

它允许您为每个表创建多个非聚集索引。在此示例中,我们正在向“专业”列添加一个,向“年收入”列添加另一个。

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.

现在您可以看到多个。

Create Multiple Non Clustered Indexes in SQL Server 10

在 SQL Server Management Studio 中创建非聚集索引

让我向您展示如何使用 Management Studio 创建和删除它

使用对象资源管理器

此示例说明如何使用 Management Studio 创建非聚集索引。

为此,请转到对象资源管理器并展开“数据库”文件夹。接下来,请展开要创建的表,右键单击“索引”文件夹将打开上下文菜单。请选择“新建”,然后选择“非聚集”。

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

Click the Add Button 12

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

请更改排序顺序。

现在您可以看到它

使用表设计器

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

接下来,右键单击列并选择“设置索引/键…”选项。

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

Non Clustered Index in SQL Server 17

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

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

Set Create as Clustered Option to No 19

查看新创建的索引

Sp_HELPINDEX Stored Procedure 20

在 SQL Server 中删除非聚集索引

请使用 DROP INDEX 语句删除。

DROP INDEX CustomerRecord.IX_CustomerRecord_Profession
Messages
--------
Command(s) completed successfully.

使用 Management Studio 示例

在对象资源管理器中,展开“数据库”文件夹并选择其中包含索引的表。接下来,展开“索引”文件夹,右键单击名称将打开上下文菜单。请选择“删除”选项。

Delete Non Clustered Index 5

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

Delete Object Window 6

评论已关闭。