Meine Datenbank ist extrem groß und wächst mit einer Geschwindigkeit von ~ 20 Millionen Zeilen pro Tag. Ich habe Zeitstempeldaten, die wichtig sind, aber der größte Teil der Berichterstattung basiert auf Datumsbereichen und Vergleichen von Woche zu Woche oder Monat zu Monat. Die Zeit wird gelegentlich in den Ergebnismengen angezeigt, jedoch nie als Kriterium verwendet. Angesichts dessen denke ich, dass ich mit einem Index nur für das Datum im Vergleich zu einem kombinierten Datum / Uhrzeit-Feld beträchtlichen Speicherplatz sparen würde. Ich bin mir nicht sicher, ob ich bei meiner Auswahl auch Leistungssteigerungen sehen würde oder ob die Aufteilung in zwei Felder Nachteile hat.
7
week
undmonth
Feldern in Betracht ziehen .Antworten:
Für Berichtszwecke hat die Aufteilung des Feldes in Datum und Uhrzeit einige Vorteile. Einige mögliche Vorteile, die Sie realisieren könnten, sind:
Sie können eine Datumsreferenztabelle (ähnlich einer Datumsdimension in einem Data Warehouse) mit Ihrer Aufteilung in Wochen, Monate usw. erstellen. Diese kann am Datum eingegeben und mit einem Join verwendet werden.
Die Analyse nach Tageszeit ist mit einem separaten Zeitfeld einfacher. Sie können die Zeit auch auf ein geeignetes Korn runden und eine Referenztabelle erstellen.
Der Index wäre etwas schmaler, obwohl jede Blattzeile immer noch eine (IIRC) 6-Byte-Seitenreferenz hat, so dass es insgesamt keine so große Ersparnis ist.
Für Ihre Anwendung erhalten Sie möglicherweise einen Gewinn aus einer Datumsreferenztabelle (erstellen Sie eine gruppierte PK am Datum für eine effiziente Suche), was wahrscheinlich effizienter ist, als die Woche und den Monat auf Ihrer großen Tabelle zu de-normalisieren.
quelle
Die Indexperformance sollte sich nicht ändern.
In einem sortierten Array oder einer sortierten Baumstruktur (dh dem Index) erfordert das Abfragen von "allen Einträgen, bei denen gleich ist" eine Suche nach dem ersten und dem letzten Eintrag im Bereich, genau wie beim Abfragen von "allen Einträgen, bei denen größer oder gleich ist" Mitternacht und kleiner als Mitternacht ".
Was interessant sein könnte, ist ein Index für
MONTH(datetimecol>)
und andere häufig verwendete Ausdrücke in Ihren Abfragen, mit denen Sie mithilfe eines Indexscans alle Zeilen mit einem passenden Monat finden können, wenn Sie den zusätzlichen Speicherplatz für diesen Index gegen eine höhere Leistung eintauschen möchten.Von einem Speicherplatz-POV bezweifle ich, dass es im Vergleich zur Größe der Datentabellen wichtig ist.
quelle