私はAdventureworks2008R2を使用してインデックス作成を研究しており、このクエリを実行するように指示されました。
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
--編集 列が含まれている非クラスター化インデックスを持つテーブル上のすべてのPKは、同じ含まれている列を持っているように見えます。それが「どうやって」答えたのですが、それでも「なぜ」と答えてほしいです。