Ich führe SQL Server 2012 aus.
Ich habe eine Abfrage, die, wenn sie in ihrer einfachsten Form gestreift wird, so aussieht:
%Vor%Die Lead-Tabelle enthält ungefähr 149 Millionen Datensätze. Es gibt einen gruppierten Index für die leadID und einen nicht gruppierten Index, der Indexe für YearID ist und ein Include für fullAddress enthält.
Diese Abfrage dauert etwa 40 Sekunden. Mir ist klar, dass das nicht schlecht ist, aber in dieser Situation ist das einfach nicht schnell genug.
Ich habe mir den Ausführungsplan angeschaut, und von dem, was ich sagen kann, sind 60% der Kosten der DISTINCT COUNT.
Wenn ich dieselbe Abfrage ohne den DISTINCT COUNT wie folgt ausführen:
%Vor%Es dauert nur 1 Sekunde zum Ausführen.
Leider muss ich verschiedene vollständige Adressen zählen. Also versuche ich herauszufinden, ob es etwas gibt, was ich tun kann, um die erste Anfrage schneller auszuführen.
Hier ist ein Screenshot des Ausführungsplans für beide Abfragen:
Hier ist ein Link, um es größer zu sehen - Ссылка
Von dem, was ich mein Hauptproblem sagen kann, ist die eindeutige Art (52%).
Jede Hilfe oder Rückmeldung wäre großartig.
Danke!
AKTUALISIEREN
Ich habe Thilos Ratschlag genommen und diesen Index angewendet:
%Vor%Ich habe tatsächlich zwei neue Testtabellen mit genau den gleichen 1 Millionen Datensätzen in jedem von ihnen erstellt. Ich habe meinen ursprünglichen Index auf beide und dann den obigen Index auf nur einen angewandt. Jetzt, wenn ich die 2 Tabellen auf dem gleichen Ausführungsplan vergleiche, ist der mit dem obigen Index ein wenig besser 48% zu 52%. Hier ist der neue Ausführungsplan - Ссылка
Das hilft einigen, aber ich brauche wirklich mehr Leistung. Irgendwelche anderen Ideen da draußen?
Eine Sache, die man versuchen sollte, ist, die Sortierung loszuwerden, indem man einen Index in fullAddress
anordnet (der auch die Spalte yearID
enthält, damit auch die where-Klausel erfüllt werden kann).
Auf diese Weise sollten Sie einen Fast-Full-Index-Scan erhalten (wahrscheinlich immer noch langsamer als der Indexbereich-Scan, den Sie für eine nicht eindeutige Zählung haben, aber hoffentlich schneller als Ihre 40er-Sortierung).
Aber warum muss es so schnell sein? Das ist nicht etwas, was Sie die ganze Zeit tun müssen, oder? Wenn dies für eine öffentliche Website ist, können Sie mit einem leicht veralteten Cache-Ergebnis davonkommen, würde ich denken.
Tags und Links sql sql-server performance indexing tsql