2012-08-28 186 views
0

我測試非聚簇索引的好處。如何執行非聚簇索引查找而不是聚簇索引掃描

我用分貝的AdventureWorks 當我執行查詢:

SELECT [address].City, [address].[AddressLine1] 
FROM [AdventureWorks].[Person].[Address] as [address] 
WHERE [address].City = 'Seattle' 

我在執行計劃選項卡

/* 
Missing Index Details from SQLQuery3.sql - 
The Query Processor estimates that implementing the following index could improve the query cost by 97.9636%. 
*/ 

/* 
USE [AdventureWorks] 
GO 
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] 
ON [Person].[Address] ([City]) 

GO 
*/ 

我在執行簡單的標籤圖標看的見「聚集索引掃描」和我知道這是不好的,因爲指數尋求更好

但是,當我執行查詢

USE [AdventureWorks] 
GO 
CREATE NONCLUSTERED INDEX CityIdx 
ON [Person].[Address] ([City]) 

GO 

我仍然看到在執行平原選項卡「聚集索引掃描」。爲什麼不「聚集索引查找」?它應該是「聚集索引查找」嗎?在哪些情況下,它應該是「聚集索引查找」。

+1

是「聚集」,而不是「分類」。 –

+0

謝謝我修復了這些錯別字 – testCoder

回答

5

你擊中index tipping point:有太多的條目與City = 'Seattle'打擾求,爲每一個在聚集索引AddressLine1。一種方法,特定的查詢,是包括投影柱:

CREATE NONCLUSTERED INDEX CityIdx 
ON [Person].[Address] ([City]) 
INCLUDE ([AddressLine1]); 

但是,隱藏真正問題,即爲什麼是你有興趣在這樣一個選擇所有行非選擇性謂詞?應用程序不應該提出這樣的請求。

+0

爲什麼它不是選擇性謂詞? – testCoder

+0

因爲在謂詞'City ='Seattle''上選擇將返回許多條目。 –

+0

在這種情況下,我應該做些什麼來檢索使用索引的城市'Seatle'的所有行? – testCoder

相關問題