使用带有SQL Server索引的INCLUDE列有什么好处?

前端之家收集整理的这篇文章主要介绍了使用带有SQL Server索引的INCLUDE列有什么好处?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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,Salary)”:

CREATE INDEX NameIndex ON Employee(LastName ASC,FirstName ASC)
       INCLUDE (HireDate,Salary)

然后sql Server在非群集名称索引中查找Joe Murphy时完成 – >满足查询的所有字段都在非聚集索引中,因此不再需要执行磁盘密集型书签查找,您的查询可能会更快.

INCLUDE列的缺点是非聚簇索引增加了磁盘空间需求,因为它们的叶级节点中将包含列.这是速度和尺寸之间的权衡(像往常一样).

原文链接:https://www.f2er.com/mssql/78407.html

猜你在找的MsSQL相关文章