数百万のレコードを持つ、2 つの列を持つ多対多のリンク テーブル CategoryProduct があります。
CREATE TABLE [dbo].[CategoryProduct](
[Category_ID] [int] NOT NULL,
[Product_ID] [int] NOT NULL,
CONSTRAINT [PK_dbo.CategoryProduct] PRIMARY KEY CLUSTERED
(
[Category_ID] ASC,
[Product_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
クラスター化インデックスに基づいて、物理レコードが次の構造で格納されることを期待しました。
CategoryID ProductID
1 2
1 3
2 1
2 3
ただし、Select の結果は
CategoryID ProductID
2 1
1 2
1 3
2 3
ProductID のグループにデータが格納されるのはなぜですか? これはデータの実際の順序を反映していますか? 一致する CategoryID がヒットしたときに、以下のようなクエリを連続読み取りで最適化できるように、CategoryID のグループにデータを保存するにはどうすればよいですか。
select ProductID from CategoryProduct where CategoryID = value