摘要:
指数劝无效,但它不会使任何以下测试difference.See的细节部分..
研究了一段时间后,发现了一个answer here及以下声明解释令人信服地关于缺少索引功能..
他们只看单个查询,或单个查询中的单个操作。他们不考虑已经存在的或您的其他查询模式。
你仍然需要一个有思想的人来分析整体索引策略,并确保你的索引结构是高效和有凝聚力的。
因此,你的问题,这个建议可能是有效的,但不应被视为理所当然。建议的索引对于执行的特定查询对于SQL Server非常有用,以降低成本。
这是获悉该指数..
CREATE NONCLUSTERED INDEX IX_1 ON Table1 (Column1)
INCLUDE (PK_Column, SomeOtherColumn)
假设你有一个查询像下面..
select pk_column, someothercolumn
from table
where column1 = 'somevalue'
SQL Server试图扫描一个狭窄的指数,以及如果有的话,那么在这种情况下,建议索引将有帮助..
此外,您没有共享表的架构,如果你有像下面这样的索引
create index nci_test on table(column1)
和下面的表格将建议再次相同索引的查询问题的说明
select pk_column, someothercolumn
from table
where column1 = 'somevalue'
更新:
我有订单表下面的模式..
[orderid] [int] NOT NULL Primary key,
[custid] [char](11) NOT NULL,
[empid] [int] NOT NULL,
[shipperid] [varchar](5) NOT NULL,
[orderdate] [date] NOT NULL,
[filler] [char](160) NOT NULL
现在我创建了一个以下结构的索引。
create index onlyempid on orderstest(empid)
现在,当我有以下形式
select empid,orderid,orderdate --6.3 units
from orderstest
where empid=5
指数顾问的查询会建议以下缺失索引。
CREATE NONCLUSTERED INDEX empidalongwithorderiddate
ON [dbo].[orderstest] ([empid])
INCLUDE ([orderid],[orderdate])--you can drop orderid too ,it doesnt make any difference
如果你能看到的OrderID也在上述建议纳入
现在,让我们创建它,并观察这两个结构..
---根级别-------
对于索引onlyempid ..

索引empidalongwithorderiddate

----叶级-------
对于指数onlyempid ..

索引empidalongwithorderiddate

正如你所看到的,根据建议创建没有区别,即使它是无效的。
我认为建议是基于查询索引顾问做跑,是专为查询,且无其他指标的想法参与
我认为这个建议是多余的(一般来说,缺少的索引建议需要仔细审查,看哪个是真正的好主意,因为优化器会建议所有东西和厨房水槽)。你可以尝试用'INCLUDE(SomeOtherColumn)'创建索引,并查看查询是否使用它,并且提示消失,这将是一个非常可靠的确认。 –
您能否显示涉及的表的查询计划和模式 – TheGameiswar
您的理解是正确的 - 任何非聚簇索引的*叶级*包含该索引本身的列,任何*包括*列,**和**聚簇键列(S)。问题确实是调优顾问:这是一个已知暗示不必要的软件,完全是多余的改变。不要盲目使用这些建议! –