簡體   English   中英

SQL Server 2005中的復合聚集索引和非聚集索引

[英]Composite clustered index and non clustered index in sql server 2005

我用組合主鍵(假設PrmID和Type)創建了一個新表,因此創建了一個新的組合聚簇索引(第一個是PrmID)。我為Type添加了另一個非聚簇索引。

我的問題是-當我生成對Type執行任何語句的查詢時(例如GROUP BY),SQL引擎使用的是非聚集索引表還是PK聚集索引(對於此類查詢而言更昂貴)?

-編輯-

謝謝馬克,我錯過了...

-結束編輯-

其次,PrimID在表中是否真的不是唯一的,並且僅與Type結合使用才唯一? 如果表中沒有重復PrimID,請重新考慮使其成為復合PK。

第三,回答這些類型問題的最佳方法是查看查詢的執行計划。 我們可以給你我們是怎么的SQL應該處理計划的答案,但SQL Server將更改基於您的數據庫,硬件等數據的各種情況下的執行計划...

執行計划如下所示: 在此處輸入圖片說明

您可以看到它很好地告訴您使用了哪些idexe,以及如何使用它們... 這是一篇文章,對理解執行計划進行了很好的介紹。

它取決於查詢的外觀,訪問的列,覆蓋范圍等。

一個簡單的GROUP BY on類型很可能會使用NC索引。 如果您使用其他列,則可能會進行書本地圖/鍵查找,否則索引將被忽略,並且PK掃描效率低下

我的理解是,當您具有多字段索引並且查詢使用索引中的第一個字段時,則將不使用該索引(太困難,效率不高等),然后將使用其他索引。

但是,要明確知道這一點 ,請使用執行計划甚至只是估計的執行計划來運行查詢。 如果您使用的是SSMS,則只需按工具欄按鈕即可。 它看起來像是三個小小的藍色和綠色方框,呈倒“ L”形。 這將准確告訴您正在使用什么索引。 而且,盡管執行計划可以在查詢的整個生命周期中發生變化(隨着數據的變化),但不應針對此答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM