2017-11-13 1 views
0

Ich habe eine Tabelle, deren Definition sieht wie folgt aus:SQL Server Datenbank-Tuning Advisor schlägt vorhandenen gruppierten Index

CREATE TABLE Budget_Cost_Centers 
(
    CostCenterIDX INT NOT NULL, 
    Name VARCHAR(100) NOT NULL, 
    ... 
    CONSTRAINT PK_Budget_Cost_Centers 
     PRIMARY KEY CLUSTERED (CostCenterIDX ASC) 
); 

(einige Spalten wurden weggelassen, weil sie nicht relevant sind)

ich jetzt die Datenbank laufen Tuning Advisor für eine Abfrage gegen diese Tabelle und schlägt folgendes vor:

CREATE NONCLUSTERED INDEX [_dta_index_Budget_Cost_Centers_5_1079674894__K1] 
ON [dbo].[Budget_Cost_Centers] ([COSTCENTERIDX] ASC) 
    WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] 

Das ist offensichtlich das gleiche wie der vorhandene Primärschlüssel. Irgendeine Idee, warum es das vorschlagen würde? Ich versuche sicherzustellen, dass ich nicht vergesse, wie SQL Server funktioniert, im Gegensatz zum Advisor, der etwas lächerliches vorschlägt, weil das nur die Grenzen der automatisierten Tuning-Analyse sind.


Mehr Info: brach ich die Abfrage nach unten, die diese Empfehlung auf das Wesentliche herstellte:

select 
    d.PhaseIDX, 
    sum(d.YTDActual) YTDActual 
from 
    Budget_Cost_Centers cc 
join 
    Budget_Cost_Centers mc on cc.MasterCostCenteridx = mc.CostCenterIDX 
join 
    Budget_Detail d on cc.CostCenterIDX= d.CostCenterIDX 
group by 
    d.PhaseIDX 

Die Tabelle Selbstverweise und die Abfrage Autor trat es sich um die filtern erfasst nur diejenigen, die diese Referenz enthalten. Ändern der Abfrage auf die folgenden vergleichbaren Ergebnissen in den Berater nicht machen mehr die Empfehlung:

select 
    d.PhaseIDX, 
    sum(d.YTDActual) YTDActual 
from 
    Budget_Cost_Centers cc 
join 
    Budget_Detail d on cc.CostCenterIDX = d.CostCenterIDX 
where 
    cc.MasterCostCenterIDX is not null 
group by 
    d.PhaseIDX 

der Ausführungsplan mit dem ursprünglichen SQL Hier wird:

Execution Plan

+0

Dieser ist definitiv ein Puzzler. Das einzige, was mir einfällt, ist, ob der Primärschlüssel "SORT_IN_TEMPDB = ON" gesetzt hat. In diesem Fall könnte es Fälle geben, in denen der andere Schlüssel effizienter ist ... aber das scheint immer noch seltsam. –

+0

Nie so etwas gesehen. Haben Sie gesehen, ob Ihr Ausführungsplan den vorhandenen Index verwendet hat? Durch die Veröffentlichung des eigentlichen EP können andere feststellen, was gerade passiert. –

+0

Ich habe mehr Informationen, einschließlich Ausführungsplan, oben hinzugefügt. – John

Antwort

Verwandte Themen