Zusammenfassung:
Index empfohlen ist nicht gültig, aber es macht keine difference.See unten Tests für Details ..
seit einiger Zeit Nach der Untersuchung, fand eine answer here und unter Anweisung erklärt überzeugend über fehlende Index-Funktion ..
sie nur eine einzelne Abfrage oder eine einzelne Operation innerhalb einer einzigen Abfrage betrachten. Sie berücksichtigen nicht, was bereits existiert oder Ihre anderen Suchmuster.
Sie brauchen immer noch einen denkenden Menschen, der die gesamte Indexierungsstrategie analysiert und sicherstellt, dass Ihre Indexstruktur effizient und zusammenhängend ist.
Also kommt zu Ihrer Frage, dieser Index kann gültig sein, sollte aber nicht als selbstverständlich angesehen werden. Der empfohlene Index ist nützlich für SQL Server für die bestimmte Abfrage ausgeführt, um Kosten zu reduzieren.
Dies ist der Index, der empfohlen wurde ..
CREATE NONCLUSTERED INDEX IX_1 ON Table1 (Column1)
INCLUDE (PK_Column, SomeOtherColumn)
Angenommen, Sie eine Abfrage wie unten haben ..
select pk_column, someothercolumn
from table
where column1 = 'somevalue'
SQL Server versucht, einen schmalen Index als auch, wenn vorhanden zu scannen, so In diesem Fall wird ein Index wie empfohlen hilfreich sein.
Weiter haben Sie das Schema der Tabelle nicht geteilt, wenn Sie einen Index wie unter
haben
create index nci_test on table(column1)
und eine Abfrage von unten stehendem Formular wieder denselben Index beraten, wie in Frage angegeben
select pk_column, someothercolumn
from table
where column1 = 'somevalue'
Update:
i Aufträge Tabelle mit folgendem Schema habe ..
[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
Jetzt Ich habe einen weiteren Index der Struktur erstellt.
create index onlyempid on orderstest(empid)
Jetzt, als ich habe eine Abfrage von unten stehenden Formular
select empid,orderid,orderdate --6.3 units
from orderstest
where empid=5
Indexberater werden unter fehlendem Index beraten.
CREATE NONCLUSTERED INDEX empidalongwithorderiddate
ON [dbo].[orderstest] ([empid])
INCLUDE ([orderid],[orderdate])--you can drop orderid too ,it doesnt make any difference
Wenn Sie orderid sehen können auch in oben Vorschlag enthalten ist
lässt es jetzt schaffen und beide Strukturen beobachten ..
--- Root-Ebene -------
für Index onlyempid ..
für Index empidalongwithorderiddate
---- Blattebene -------
Für Index onlyempid ..
für Index empidalongwithorderiddate
Wie Sie sehen können Das Erstellen nach Vorschlag macht keinen Unterschied, obwohl es ungültig ist.
Ich nehme Vorschlag von Index Advisor auf Abfrage basiert gemacht wurde lief und ist speziell für die Abfrage und es hat keine Ahnung von anderen Indizes
beteiligt
Ich denke, der Vorschlag ist überflüssig (in der Regel erfordern die fehlenden Indexvorschläge eine genaue Überprüfung, um zu sehen, welche wirklich eine gute Idee sind, weil der Optimierer alles vorschlagen und die Küche sinken wird). Sie könnten versuchen, den Index nur mit "INCLUDE (SomeOtherColumn)" zu erstellen und sehen, ob die Abfrage ihn verwendet und der Hinweis verschwindet, was eine ziemlich solide Bestätigung wäre. –
Können Sie den Abfrageplan und das Schema der beteiligten Tabellen anzeigen? – TheGameiswar
Ihr Verständnis ist richtig - die * Blattebene * eines beliebigen Nonclustered-Index enthält die Spalten dieses Indexes, alle * enthaltenen * Spalten, ** und ** die Clustering-Schlüsselspalte (s).Das Problem ist wirklich der Tuning-Berater: Es ist eine Software, von der man weiß, dass sie eher unnötig ist, etwas völlig überflüssiges. Benutze diese Empfehlungen nicht blind! –