【问题标题】:Why does Sql Server recommend creating an index when it already exist?为什么 Sql Server 建议在索引已经存在的情况下创建索引?
【发布时间】:2010-03-15 18:31:57
【问题描述】:

我对我们的一个表运行了一个非常基本的查询,我注意到执行计划查询处理器建议我们在列上创建索引

查询是

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 建议我在已经存在的情况下创建这样的索引?

【问题讨论】:

    标签: sql-server-2008 indexing query-analyzer


    【解决方案1】:

    索引列和排序顺序有所不同...

    以前的SO 1SO 2

    但是,对于这么简单的事情,请尝试添加 INCLUDE clause 以使其覆盖。

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

    【讨论】:

    • 很好,我不会在数据列上这样做,但这让我知道了其他一些可能有用的地方。
    猜你喜欢
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    相关资源
    最近更新 更多