2012-03-26 26 views
0

Ich habe eine ziemlich große Tabelle, die ich für eine Berichtsanwendung abfragen muss. Meistens sind die Nutzer an den Daten der letzten 7 Tage interessiert, möchten aber die älteren (Archivdaten) hin und wieder abfragen können. Da sie wollen, dass alles blitzschnell für die letzten Daten ist, aber nichts gegen das Warten auf Archivdatensätze ist, schätze ich, dass ich mit einer partitionierten Ansicht (data) und zwei Tabellen (data_current und data_archive) in Ordnung sein sollte.Wie erstellt und verwaltet eine partitionierte Ansicht mit den letzten 7 Tagen und archivieren Datensätze in SQL Server 2005?

Ich weiß, wie die ersten Tabellen (Einschränkungen und alle) und die Ansicht erstellt. Wie gehe ich vor, um die tägliche Wartung zu automatisieren (ältere Daten von _current zu _archive verschieben)?

+0

Partitionierte Ansichten existieren (und sind schon seit einiger Zeit), aber sie sind eine hässliche Krücke. Haben Sie eine [Partitionierte Tabelle] (http://msdn.microsoft.com/en-us/library/ms188730 (v = sql.90) .aspx) in Betracht gezogen? –

+0

Ich dachte, es wäre einfacher zu erreichen, was ich mit einer partitionierten Ansicht erreichen möchte. Es wird auch einfacher für meine Mitarbeiter sein zu arbeiten (da sie diese bereits kennen). – Vlad

Antwort

0

Sie sollten sliding window pattern verwenden. Schreiben Sie eine gespeicherte Prozedur, um Partitionen zwischen Tabellen auszutauschen, und verwenden Sie einen Job, um die Ausführung zu planen.

+0

Schönes Beispiel, aber da die Ansicht nicht aktualisierbar sein muss (alle Einfügungen kommen über '_current', es gibt keine Aktualisierungen), könnte es besser sein, die Einschränkungen für beide Tabellen fallen zu lassen und die Zeilen von' _current' nach '_archive zu verschieben 'und neue Einschränkungen zu den Tabellen hinzufügen. Ich kann das außerhalb der Hauptverkehrszeiten machen. – Vlad

+0

Beachten Sie, dass das Verschieben von Zeilen zwischen Partitionstabellen keine Daten verschiebt, sondern die gesamte Partition von einer Tabelle in eine andere umschaltet. Es ist sehr schnell und skalierbar. Daher würde ich lieber eine Partitionstabelle _current und _archive und eine Ansicht als eine Vereinigung dieser Tabellen verwenden. –