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 既是一個邏輯運算子,也是一個物理運算子。