所以,我们有一个表,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 *
,为什么它只是在索引上保释并进行扫描,因为它似乎仍然可以从使用它中受益,因为它在 WHERE 子句中被引用?