Wenn Sie Min/Max/Avg-Abfragen ausführen, bevorzugen Sie Aggregationstabellen oder einfach quer durch einen Zeilenbereich in der Rohtabelle?Um zu aggregieren oder nicht zu aggregieren, ist dies die Designfrage des Datenbankschemas
Dies ist offensichtlich eine sehr offene Frage und es gibt keine richtige Antwort, also suche ich nur nach allgemeinen Vorschlägen der Leute. Angenommen, die Rohdatentabelle besteht aus einem Zeitstempel, einem numerischen Fremdschlüssel (z. B. einer Benutzer-ID) und einem Dezimalwert (z. B. einem Kaufbetrag). Nehmen Sie außerdem an, dass in der Tabelle Millionen von Zeilen vorhanden sind.
Ich habe beides getan und bin zerrissen. Auf der einen Seite haben Aggregationstabellen mir erheblich schnellere Abfragen gegeben, aber auf Kosten einer Zunahme von zusätzlichen Tabellen. Das Anzeigen der aktuellen Werte für einen aggregierten Bereich erfordert entweder das vollständige Zurücksetzen auf die Rohdatentabelle oder das Kombinieren feinkörnigerer Aggregationen. Ich habe festgestellt, dass im Anwendungscode zu verfolgen ist, welche Aggregationstabelle abgefragt wird, wenn mehr Arbeit, die man denkt, und Schemaänderungen erforderlich sind, da die ursprünglichen Aggregationsbereiche ausnahmslos nicht ausreichen ("Aber ich wollte sehen unsere Verkäufe über die letzten 3 Zahlungszeiträume! ").
Auf der anderen Seite kann die Abfrage von den Rohdaten strafend langsam sein, aber lässt mich sehr flexibel über die Datenbereiche sein. Wenn sich die Bereichsgrenzen ändern, ändere ich einfach eine Abfrage, anstatt Aggregationstabellen neu erstellen zu müssen. Ebenso benötigt der Anwendungscode weniger Aktualisierungen. Ich vermute, dass ich, wenn ich schlauer über meine Indizierung wäre (d. H. Immer gute Deckungsindizes zu haben), in der Lage wäre, die Strafe für die Auswahl aus den Rohdaten zu reduzieren, aber das ist keineswegs ein Allheilmittel.
Gibt es trotzdem das Beste aus beiden Welten?
Für welche Datenbank ist das? –
Ich verwende normalerweise MySQL, aber hoffentlich gelten die Tipps für alle SQL-Datenbanken. – pr1001
@ pr1001: Es ist ein allgemeines Problem in gewissem Umfang, aber einige Datenbanken bieten Mechanismen, um dieses Problem zu erleichtern (z. B. Oracle "materialisierte Ansichten"), so dass dieses "richtig" zu einem Grad – skaffman