したがって、InventoryListItems
いくつかの列を持つテーブルがあります。特定の列(、外部キー)に基づいて行を検索するg_list_id
ことがあるため、その外部キー列を、と呼ぶ非クラスター化インデックスに配置しますMYINDEX
。
したがって、次のようなデータを検索すると、次のようになります。
-- fake data for example
DECLARE @ListId uniqueidentifier
SELECT @ListId = '7BCD0E9F-28D9-4F40-BD67-803005179B04'
SELECT *
FROM [dbo].[InventoryListItems]
WHERE [g_list_id] = @ListId
MYINDEX
インデックスを使用して必要な行だけを検索し、それらの行の情報を検索することを期待していました。したがって、インデックス自体で必要なものをすべて見つけるほど良くはありませんが、テーブルのフルスキャンを実行するよりも大きなメリットがあります。
しかし、代わりに、クラスター化されたインデックススキャンをまだ取得しているようです。なぜそうなるのか理解できません。
インデックスのインクルードされた列の値のみをSELECTするようなことをすると、期待どおりのインデックスシークが実行され、インデックスからすべてがプルされます。
しかし、私SELECT *
がそうだとしたら、WHERE句で参照されているため、インデックスを使用することで大きなメリットが得られると思われる場合に、インデックスを取得してスキャンを実行するのはなぜですか?