【发布时间】:2012-09-25 15:07:40
【问题描述】:
所以,我们有一个表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 子句中被引用,似乎仍然可以从使用它中受益匪浅?
【问题讨论】: