これについて私を助けるためにあなたの時間を共有できることを願っています.
現在、データ取得のパフォーマンスを比較するために 3 つのテーブルを使用しています。これら 3 つのテーブルには、同じ列 (LocInvID、ActivityDate、ItemID、StoreID、CustomerID)、同じデータ (約 1,300 万レコード) があります。
テーブル LocInv1: LocInvID でクラスター化インデックスを使用します (主キーでもあります)。ActivityDate にパーティション テーブルを使用する。また、3 つの列 (ItemID、StoreID、CustomerID) は非クラスター化インデックスです。
テーブル LocInv2: LocInvID でクラスター化インデックスを使用します (主キーでもあります)。Partition Table を使用していません。
テーブル LocInv3: LocInvID でクラスター化インデックスを使用します (主キーでもあります)。また、3 つの列 (ItemID、StoreID、CustomerID) は非クラスター化インデックスです。Partition Table を使用していません。
非クラスター化インデックスの作成 [IX_LocInv3] ON [LocInv3] ( [ItemID] ASC ,[StoreID] ASC, [CustomerID] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE =オフ、ALLOW_ROW_LOCKS = オン、ALLOW_PAGE_LOCKS = オン) オン [プライマリ] GO
そして、このクエリ文字列を実行すると(3つのテーブルで)
select ActivityDate,ItemID,StoreID,CustomerID from LocInv1 WITH (INDEX(IX_LocInv)) where ItemID=43
select ActivityDate,ItemID,StoreID,CustomerID from LocInv2 where ItemID=43
select ActivityDate,ItemID,StoreID,CustomerID from LocInv3 where ItemID=43
結果はかなり奇妙です:
テーブル LocInv1 が最も遅くなりました。出来ますか?クエリ文字列が間違っていますか?
テーブル LocInv3 は非クラスター化インデックスを使用しますが、実際の実行計画ではクラスター化インデックス スキャンです。理解できません。ItemID を使用してクエリを実行しましたが、なぜクラスター化インデックス スキャンなのですか?
Table LocInv2 は LocInvID に Clustered Index のみを使用していますが、最速の結果が得られました。それが正しいか?
お知らせ下さい。
ありがとう。