5、对拥有聚集索引表执行T-SQL语句:
执行下面脚本:
USE [TestDB]
GO
ALTER TABLE dbo.Nums ADD CONSTRAINT
PK_Nums PRIMARY KEY CLUSTERED
(
n
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
5.1、语句:SELECT n FROM [TestDB].[dbo].[Nums]
选择包括实际的执行计划,我们将看到:
聚集索引扫描(Clustered Index Scan):Clustered Index Scan 运算符扫描在 Argument 列中指定的聚集索引。存在可选的 WHERE:() 谓词时,则只返回满足该谓词的那些行。如果 Argument 列包含 ORDERED 子句,则表示查询处理器已请求按聚集索引排列行的顺序返回行输出。如果没有 ORDERED 子句,则存储引擎将以最佳方式扫描索引,而不需要生成排序输出。Clustered Index Scan 既是一个逻辑运算符,也是一个物理运算符。
5.2、语句:INSERT INTO [TestDB].[dbo].[Nums] ([n]) VALUES (1000001)
选择包括实际的执行计划,我们将看到:
聚集索引插入(Clustered Index Insert):Clustered Index Insert 运算符将行从其输入插入到 Argument 列中指定的聚集索引中。Argument 列中还包含一个 SET:() 谓词,指示为各个列设置的值。如果 Clustered Index Insert 没有子级插入值,则插入的行是从插入运算符自身获取的。Clustered Index Insert 是一个物理运算符。
5.3、语句:UPDATE [TestDB].[dbo].[Nums] SET n = 1000002 WHERE n = 1000001
选择包括实际的执行计划,我们将看到:
聚集索引更新(Clustered Index Update):Clustered Index Update 运算符用于更新 Argument 列中指定的聚集索引中的输入行。如果出现 WHERE:() 谓词,则只更新那些满足该谓词的行。如果出现 SET:() 谓词,则每个已更新的列都将设置为该值。如果出现 DEFINE:() 谓词,则将列出该运算符定义的值。可以在 SET 子句中、该运算符内的其他位置和该查询内的其他位置引用这些值。Clustered Index Update 既是一个逻辑运算符,也是一个物理运算符。
5.4、语句:DELETE FROM [TestDB].[dbo].[Nums] WHERE n = 1000002
选择包括实际的执行计划,我们将看到:
聚集索引删除(Clustered Index Delete):Clustered Index Delete 运算符从 Argument 列中指定的聚集索引中删除行。如果 Argument 列中出现 WHERE:() 谓词,则只删除满足该谓词的行。Clustered Index Delete 是一个物理运算符。
5.4、语句:SELECT n FROM [TestDB].[dbo].[Nums] WHERE n = 1000000
选择包括实际的执行计划,我们将看到:
聚集索引查找(Clustered Index Seek):Clustered Index Seek 运算符可以利用索引的查找功能从聚集索引中检索行。Argument 列包含正在使用的聚集索引的名称和 SEEK:() 谓词。存储引擎仅使用索引来处理满足 SEEK:() 谓词的行。它还包括 WHERE:() 谓词,其中存储引擎对满足 SEEK:() 谓词的所有行进行计算,但此操作是可选的,并且不是使用索引来完成的。如果 Argument 列包含 ORDERED 子句,则表示查询处理器已决定必须按聚集索引排序行的顺序返回行。如果没有 ORDERED 子句,存储引擎将以最佳方式搜索索引,而不对输出进行必要的排序。若允许输出保持顺序,则效率可能比生成非排序输出的效率低。出现关键字 LOOKUP 时,将执行书签查找。Clustered Index Seek 既是一个逻辑运算符,也是一个物理运算符。