所以,我們有一個表,InventoryListItems
,有幾列。因爲我們要尋找以基於particlar柱(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子句中被引用?
這些鏈接將幫助回答您的問題:[Link1](http://stackoverflow.com/questions/6289393/why-would-sql-server-choose-clustered-index-scan-over-non-clustered-one )[鏈路2](http://sqlblog.com/blogs/kalen_delaney/archive/2007/07/22/did-you-know-forcing-a-nonclustered-index-scan-to-avoid-sorting.aspx) Link3](http://www.sqlskills.com/BLOGS/KIMBERLY/post/The-Tipping-Point-Query-Answers.aspx)希望這會有所幫助。 – Luftwaffe