gpt4 book ai didi

sql - 将INCLUDE列与SQL Server索引一起使用有什么好处?

转载 作者:行者123 更新时间:2023-12-04 04:44:57 25 4
gpt4 key购买 nike

CREATE NONCLUSTERED INDEX index_name 
ON <object> ( column [ ASC | DESC ] [ ,...n ] )
[ INCLUDE ( column_name [ ,...n ] ) ]
[ WHERE <filter_predicate> ]

在以上语法中,我们将在INCLUDE中指定非键列。指定非键列的好处是什么?

最佳答案

假设您有一个雇员表,如下所示:

CREATE TABLE Employee(EmployeeID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(50),
FirstName VARCHAR(50),
HireDate DATETIME,
Salary DECIMAL)

您将在EmployeeID上具有主集群键,并且在(LastName,FirstName)上可能具有非集群键,以便能够按名称查找员工。
CREATE INDEX NameIndex ON Employee(LastName ASC, FirstName ASC)

现在,如果您需要查找“Joe Murphy”并获取他的聘用日期和薪水,发生的事情是在基于名称的非聚集键中进行索引查找(这很不错),但是为了获取聘用日期和薪水,SQL Server需要对实际的表数据进行所谓的书签查找,以获取Joe Murphy的记录。这很可能会导致一个或几个物理磁盘访问(这在性能方面很差)。

但是:如果您的基于名称的非聚集索引还指定了“INCLUDE(HireDate,薪水)”:
CREATE INDEX NameIndex ON Employee(LastName ASC, FirstName ASC)
INCLUDE (HireDate, Salary)

然后在非群集名称索引中查找Joe Murphy后,便完成了SQL Server->满足查询条件的所有字段都在非群集索引中,因此不再需要进行磁盘密集型书签查找和您的查询可能会更快。

INCLUDE列的缺点是非聚集索引增加了磁盘空间需求,因为它们将在其叶级节点中包含列。在速度和大小之间进行权衡(通常)。

马克

关于sql - 将INCLUDE列与SQL Server索引一起使用有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/818222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com