Die Beschleunigung von SQL-Abfragen mit Indizes

Ich habe eine Tabelle namens Products.

Diese Tabelle enthält über 3 Millionen Einträge. Jeden Tag kommen etwa 5.000 neue Einträge. das passiert nur während der Nacht in nur 2 Minuten.

Aber diese Tabelle wird abgefragt jede Nacht vielleicht über 20 000 mal mit dieser Abfrage.

SELECT Price 
FROM Products 
WHERE Code = @code 
  AND Company = @company 
  AND CreatedDate = @createdDate

Tisch Struktur:

Code          nvarchar(50)
Company       nvarchar(10)
CreatedDate   datetime

Kann ich sehen, dass diese Abfrage dauert etwa eine Sekunde, um ein Ergebnis zurückgeben von Products Tabelle.

Gibt es keine productId Spalte in der Tabelle ist nicht erforderlich. Es gibt also keinen Primärschlüssel in der Tabelle.

Ich würde gerne irgendwie verbessern diese Abfrage, damit das Ergebnis schneller.

Ich habe noch nie verwendet die Indizes vor. Was wäre der beste Weg für die Verwendung von Indizes für diese Tabelle?

Wenn ich eine primary key-glaubst du, es würde beschleunigt den Abfrage-Ergebnis? Halten Sie im Verstand, dass ich immer noch zur Abfrage der Tabelle, indem Sie 3 Parameter, wie

WHERE Code = @code 
  AND Company = @company 
  AND CreatedDate = @createdDate. 

Dies ist obligatorisch.

Als ich erwähnte, dass der Tisch bekommt neue Einträge in 2 Minuten jeden Tag, während der Nacht. Wie würde sich das auf die Indizes?

Wenn ich Indizes, die Spalte wäre die beste zu verwenden und ob ich den verwenden Sie clustered oder non-clustered-Indizes?

  • finden Sie heraus, fehlende Indizes auf der Tabelle mit tuning advisor oder Create Clustered Index auf eine Spalte, die mehr tun, DML-Operationen, und Erstellen Sie Nicht Gruppierte Index zusammen mit Abdeckenden Indizes
  • Bekommen Sie einen index-Vorschlag, wenn Sie die Anzeige der geschätzten Ausführungsplan der Abfrage im SSMS?
  • Ich würde einen NCI auf (CreatedDate, Company, Code) INCLUDE(Price).
  • "Es gibt also keinen Primärschlüssel in der Tabelle." - Jede Tabelle sollte einen Primärschlüssel haben, auch wenn es nur ein Ersatzschlüssel. @wewesthemenace index sieht entsprechende.
  • die Abfrage wird ausgeführt durch die Konsole-Anwendung. nie verwendet-Ausführung plan im ssms @Beil.
  • danke für den Vorschlag, aber würde erklären, dass Ihre Abfrage ein bisschen mehr. vielleicht Antworten als eine Antwort mit Abfrage wewesthemenace
  • Ich werde fügen Sie einen Primärschlüssel in der Tabelle Dank Mitch Weizen und das Ergebnis sehen.
  • Sollte jede Tabelle über einen gruppierten index verfügen, oder zumindest in einem Fall die Tabelle wird aktualisiert / gelöscht werden, denn das kann schwerwiegende Fragmentierung und verschwendet Platz in der Tabelle
  • Hallo @akdurmus, hier ist ein allgemeiner Tipp für die Beschleunigung von Abfragen: SQL-Management-Studio (SSMS) können Sie die option "Show ACTUAL Execution Plan". (sicher sein, es ist tatsächlich, nicht geplant), Dann starten Sie Ihre Abfrage, und danach sehen Sie den Ausführungsplan in einem separaten tab. Sie können dort sehen, was passiert in Ihrer Abfrage, und warum es so langsam ist. Auch erkennt das system, dass ein wichtiger index fehlt, und es wird Ihnen zeigen, die create index statement, das beschleunigt die Abfrage.
  • PS: Es hilft wirklich, zu lernen, zu verstehen, die Durchführung planen und wie Sie Indizes und Tabellen arbeiten. Sie werden sehen, es ist nicht so viel Magie, aber es ist immer wichtig, zu verstehen, wie die mechanik funktioniert. Sobald Sie das wissen haben, können Sie sich unglaubliche Geschwindigkeiten aus der Datenbank!

InformationsquelleAutor akd | 2015-06-15
Schreibe einen Kommentar