使用带有SQL Server索引的INCLUDE列有什么好处?
发布时间:2020-05-28 16:32:19 所属栏目:MsSql 来源:互联网
导读:CREATE NONCLUSTERED INDEX index_name ON object ( column [ ASC | DESC ] [ ,...n ] ) [ INCLUDE ( column_name [ ,...n ] ) ] [ WHERE filter_predicate ] 在上面的语法中,我们将在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列的缺点是非聚簇索引增加了磁盘空间需求,因为它们的叶级节点中将包含列.这是速度和尺寸之间的权衡(像往常一样). 渣 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQL Server 有用的SQL语句(删除重复记录,收缩日志)
- sqlserver 自动备份所有数据库的SQL
- mysql ERROR 1044 (42000): Access denied for user @local
- SQL查询语句优化的实用方法总结
- sql-server – Microsoft SQL Server 2014的Hibernate方言是
- sql-server – 如何清除SSMS中的空行?
- mysql删除重复记录语句的方法
- Windows或Linux系统中备份和恢复MongoDB数据的教程
- .net – SQL Server 2008 R2地理距离?
- MySQL replace函数替换字符串语句的用法
