摘要:
指數勸無效,但它不會使任何以下測試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)。問題確實是調優顧問:這是一個已知暗示不必要的軟件,完全是多餘的改變。不要盲目使用這些建議! –