我一直在研究索引使用Adventureworks2008R2,並被告知運行此查詢。爲什麼PK被列爲其索引中包含列?
SELECT s.name AS SchemaName,
OBJECT_NAME(i.object_id) AS TableOrViewName,
i.name AS IndexName,
c.name AS ColumnName
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
ON i.object_id = ic.object_id
INNER JOIN sys.columns AS c
ON ic.object_id = c.object_id
AND ic.column_id = c.column_id
INNER JOIN sys.objects AS o
ON i.object_id = o.object_id
INNER JOIN sys.schemas AS s
ON o.schema_id = s.schema_id
WHERE ic.is_included_column <> 0
AND s.name <> 'sys'
ORDER BY SchemaName, TableOrViewName, i.index_id, ColumnName;
輸出看起來是這樣的:
SchemaName TableorViewName IndexName ColumnName
1 Production Productreview PK_ProductReview_ProductReviewID Comments
2 Production Productreview IX_ ProductReview_ProductId_Name Comments
我明白爲什麼它會列出IX_ ProductReview_ProductId_Name但不能明白爲什麼它顯示PK_ProductReview_ProductReviewID。
的筆記說,通過解釋「聚簇索引中的所有列,顧名思義,包含了。」 在這種情況下,爲什麼只顯示註釋列,爲什麼不是所有的PK上市?
我懷疑我現在很蠢,但是。 。 。 TIA
- 編輯 它seeems,對具有與包括柱的非聚集索引上的表中的所有的PK被示出爲具有相同的包括柱。 這就是「如何」回答,但我仍然喜歡「爲什麼」回答。
**謝謝**#1。 。 。 。 。 。發現問題。 我的錯誤是盲目地相信編寫MOC培訓課程的人,而不是仔細研究t-SQL代碼。靠近陡峭的學習曲線的底部是我的藉口 **謝謝**#2。 。 。 。 。 。提供額外的建議 – Simon 2013-02-15 08:52:31