2016-03-22 4 views
1

Ich speicherte Daten für eine Tabelle wie folgt.Wie kann die Tabellengröße für den Datumsdatentyp reduziert werden?

create table A 
(
    RecordDate date not null, -- 3 bytes 
    SomeNumber int not null, -- 4 bytes 
) 

Für jeden einzelnen Kalendertag werden etwa 20 Tausend Datensätze für Tabelle A erstellt, mit dem gleichen RecordDate, aber verschiedenem BeliebigerWert. Das macht das RecordDate für viele Datensätze überflüssig. Ich hatte das Gefühl, dass es Platz für die Reduzierung der Tabellengröße gibt. Gibt es eine Möglichkeit, die Größe von Tabelle A zu verkleinern, ohne die Datumsinformationen zu verlieren? Vielen Dank.

+1

Wie viele Bestellungen pro Tag erwarten Sie? Wenn es nicht mehrere tausend sind, kann ich keine Situation erkennen, in der der relative Platz einer Datumsspalte in irgendeiner modernen Datenbank eine Beule machen würde. Sind Sie sicher, dass Sie nur das Datum speichern möchten? Wenn Sie eine Zeile für jede Bestellung haben, können Sie auch die Zeit speichern, es ist eine sehr nützliche Statistik. –

+3

Ich sehe hier keinen Optimierungsbereich. Wenn sich dies auf einem eingebetteten Gerät befindet und Sie räumlich stark eingeschränkt sind, können Sie das Datum mit der Startreihenfolge und der Endreihenfolge für den Tag in einer anderen Tabelle speichern, aber es wird ein Albtraum, wenn Sie Daten abrufen möchten. – bansi

+0

es sind etwa 20 Tausend Datensätze pro Tag hinzugefügt. –

Antwort

0

Laut meinem Kommentar, ich denke nicht, dass es die Mühe in Ihrem Fall lohnt, selbst mit 20.000 Transaktionen pro Tag. Ich vermute, dass es sich für Millionen von Transaktionen pro Tag nicht lohnt. Ein 'Date'-Feld verwendet 3 Byte Daten, was bereits einer der kleinsten Datentypen in Ihrer Datenbank ist.

Aber ich denke, es ist eine interessante Frage.

Bansis Vorschlag ist eine sehr platzsparende Lösung (haben Sie eine Datumstabelle mit Min- und Max-Bestellnummern), aber ohne Tabellenschlüssel könnten Sie Ihre Daten brechen, und es wäre sehr schwer zu reparieren oder zu wissen gebrochen. Sie würden auch Ihre Abfragezeit massiv erhöhen, da sie für jeden Datensatz zwei Berechnungen durchführen müsste, um Daten innerhalb eines Bereichs zu finden.

Meine Lösung wäre eine dimensionale Modellierungsart Datumstabelle, mit einem Datumsschlüssel und dem Datum. Ihre Transaktionstabelle speichert einen Datumsschlüssel, zu dem Sie sich verbinden können. Um dies zu nutzen, müsste der Datumsschlüssel ein "smallint" -Typ (2 Bytes) sein. Sie würden 1 Byte pro Zeile abzüglich eines relativ unbedeutenden Betrags für die Datumstabelle selbst speichern.

Beachten Sie, dass die Verwendung von "smallint" die Anzahl der Daten auf 65.535 Tage beschränkt, oder ~ 180 Jahre, wenn die Tage aufeinander folgen.

+1

Danke Max, und Sie alle. Ich habe es aufgrund Ihrer Vorschläge durchdacht. Ihr habt recht, es lohnt sich nicht, es zu ändern. Danke, dass du alle Alternativen gezeigt hast! –

Verwandte Themen