2013-10-09 26 views
1

我對執行計劃有點新意。由於實際數據行包含在索引樹的葉級別中,因此我一直認爲聚簇索引要快得多,而非聚簇只包含索引列值加指向剩餘行數據位置的指針。因此,非羣集擁有比羣集更多的IO。爲什麼這個聚集索引比sql server中的同一個非聚集成本更高

爲了測試這個,我使用了一個具有EmployeeID(第一列)的1,000,000記錄表作爲主鍵,然後還在同一個字段中添加了非聚集索引。然後我使用查詢提示來比較每個正在使用的索引的結果。

Select EmployeeID from Employees with(index(PK_EmployeeID)) 
go 

select EmloyeeID from Employees with(index(IX_EmployeeID)) 
go 

結果顯示聚集的IO和查詢成本(相對於批處理)比非聚集的更多。有人可以解釋一下嗎?

回答

4

對於您的測試查詢,索引是「覆蓋」索引,因爲它已包含結果集所需的所有列。因此,不需要額外讀取實際表格。而且由於索引較小(較少頁面),訪問速度更快。
聚集索引實際上是表本身,按索引排序。由於它包含更多列,因此需要更多頁面讀取。

相關問題