sql-server-2008 - 为什么Sql Server建议在索引已经存在的情况下创建索引?

标签 sql-server-2008 indexing query-analyzer

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

查询是

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

最佳答案

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

上一个 SO 1SO 2

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

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

关于sql-server-2008 - 为什么Sql Server建议在索引已经存在的情况下创建索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2449517/

相关文章:

SQL 查询 - 确保 () 中的每个值都存在一行

sql - 为什么比较在 CONVERT 中不起作用?

mysql - 将查询结果优化为使用文件排序;

c++ - 制作索引创建类

elasticsearch - 带有大型char_filter列表创建的自定义分析器,用于elasticsearch

python - search() 中的 Elasticsearch-py 无法识别 'analyzer' 参数

asp.net-mvc-3 - 如何将异常从存储过程传递到我的 Post Action 方法

.htaccess - AllowOverride 安全问题

java - 如何阻止 Lucene 标准分析器删除特殊字符

sql - 选择没有重复项的随机行