1

私は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は、同じ含まれている列を持っているように見えます。それが「どうやって」答えたのですが、それでも「なぜ」と答えてほしいです。

4

1 に答える 1