Alte Frage... Aber ich möchte etwas hinzufügen, was hier noch niemand gesagt hat... (Anmerkung: Dies ist meine eigene Beobachtung, also fragen Sie nicht nach einer Referenz)
Datetime2 ist schneller, wenn es in Filterkriterien verwendet wird.
TLDR:
In SQL 2016 hatte ich eine Tabelle mit hunderttausend Zeilen und einer Datetime-Spalte ENTRY_TIME, weil sie die genaue Zeit bis auf Sekunden genau speichern musste. Beim Ausführen einer komplexen Abfrage mit vielen Verknüpfungen und einer Unterabfrage, wenn ich die Where-Klausel als:
WHERE ENTRY_TIME >= '2017-01-01 00:00:00' AND ENTRY_TIME < '2018-01-01 00:00:00'
Die Abfrage war anfangs in Ordnung, wenn es Hunderte von Zeilen gab, aber als die Anzahl der Zeilen zunahm, begann die Abfrage diesen Fehler zu geben:
Execution Timeout Expired. The timeout period elapsed prior
to completion of the operation or the server is not responding.
Ich habe die Where-Klausel entfernt, und unerwarteterweise wurde die Abfrage in 1 Sekunde ausgeführt, obwohl jetzt ALLE Zeilen für alle Daten abgerufen wurden. Ich führte die innere Abfrage mit der Where-Klausel aus, und sie dauerte 85 Sekunden, und ohne Where-Klausel dauerte sie 0,01 Sekunden.
Ich bin hier auf viele Threads zu diesem Thema gestoßen, da Leistung der Datumsfilterung
Ich habe die Abfrage ein wenig optimiert. Aber die wirkliche Geschwindigkeit, die ich bekam, war durch die Änderung der datetime Spalte zu datetime2.
Jetzt dauert dieselbe Abfrage, die zuvor eine Zeitüberschreitung verursachte, weniger als eine Sekunde.
Prost