2010-03-15 98 views
2

我跑了一個很基本的查詢對我們的表之一,我注意到,執行計劃查詢處理器建議我們在列上創建索引爲什麼Sql Server建議在已經存在的情況下創建索引?

查詢是

SELECT SUM(DATALENGTH(Data)) 
FROM Item 
WHERE Namespace = 'http://some_url/some_namespace/' 

運行後,我收到以下消息

// The Query Processor estimates that implementing the following index could improve the query cost by 96.7211%. 
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] 
ON [dbo].[Item] ([Namespace]) 

我的問題是,我已經在該列這樣的索引:

CREATE NONCLUSTERED INDEX [IX_ItemNamespace] ON [dbo].[Item] 
(
    [Namespace] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 

爲什麼Sql Server建議我在創建這樣的索引時已經存在?

回答

0

索引列和排序順序有所作爲......

上一頁SO 1SO 2

然而,對於這個東西簡單的嘗試添加INCLUDE clause,使其覆蓋。

CREATE NONCLUSTERED INDEX [IX_ItemNamespace] ON [dbo].[Item] ([Namespace]) INCLUDE ([Data]) 
+0

不錯,我不會在數據列上這樣做,但是這給了我一些其他可能有用的地方的想法。 – 2010-03-15 22:11:21

相關問題