Freigeben über


Verwenden partitionierter Sichten

Aktualisiert: 17. Juli 2006

Mithilfe von partitionierten Sichten können die Daten einer umfangreichen Tabelle in kleinere Elementtabellen aufgeteilt werden. Die Daten werden anhand von Datenwertbereichen in einer der Spalten auf die Elementtabellen aufgeteilt. Die Datenbereiche für die Elementtabellen werden in einer CHECK-Einschränkung definiert, die für die Partitionsspalte angegeben wird. Anschließend wird eine Sicht definiert, die UNION ALL verwendet, um Auswahlergebnisse aller Elementtabellen in einem einzelnen Resultset zu kombinieren. Wenn SELECT-Anweisungen, die auf die Sicht verweisen, eine Suchbedingung für die Partitionsspalte angeben, verwendet der Abfrageoptimierer die Definitionen der CHECK-Einschränkungen, um zu ermitteln, in welcher Elementtabelle die Zeilen enthalten sind.

ms190019.note(de-de,SQL.90).gifHinweis:
Die bevorzugte Methode zum Partitionieren von lokalen Daten auf einem Server besteht in der Verwendung partitionierter Tabellen. Weitere Informationen finden Sie unter Partitionierte Tabellen und Indizes.

Für das folgende Beispiel wird angenommen, dass eine Verkaufstabelle mit dem Umsatz für das Jahr 1998 in 12 Mitgliedstabellen (eine pro Monat) partitioniert wurde. Jede Mitgliedstabelle verfügt über eine Einschränkung, die für die OrderMonth-Spalte definiert ist:

CREATE TABLE May1998sales
   (OrderID      INT,
   CustomerID      INT      NOT NULL,
   OrderDate      DATETIME      NULL
      CHECK (DATEPART(yy, OrderDate) = 1998),
   OrderMonth      INT
      CHECK (OrderMonth = 5),
   DeliveryDate      DATETIME      NULL
      CHECK(DATEPART(mm, DeliveryDate) = 5)
   CONSTRAINT OrderIDMonth PRIMARY KEY(OrderID, OrderMonth)
   )

Die Anwendung, die May1998sales auffüllt, muss sicherstellen, dass alle Zeilen in der OrderMonth-Spalte den Wert 5 enthalten und dass als Bestelldatum ein Datum im Mai 1998 angegeben ist. Dies wird durch die Einschränkungen, die für die Tabelle definiert sind, erzwungen.

Anschließend wird eine Sicht definiert, die UNION ALL verwendet, um die Daten aus allen 12 Mitgliedstabellen auszuwählen und in einem einzelnen Resultset zu kombinieren.

CREATE VIEW Year1998Sales
AS
SELECT * FROM Jan1998Sales
UNION ALL
SELECT * FROM Feb1998Sales
UNION ALL
SELECT * FROM Mar1998Sales
UNION ALL
SELECT * FROM Apr1998Sales
UNION ALL
SELECT * FROM May1998Sales
UNION ALL
SELECT * FROM Jun1998Sales
UNION ALL
SELECT * FROM Jul1998Sales
UNION ALL
SELECT * FROM Aug1998Sales
UNION ALL
SELECT * FROM Sep1998Sales
UNION ALL
SELECT * FROM Oct1998Sales
UNION ALL
SELECT * FROM Nov1998Sales
UNION ALL
SELECT * FROM Dec1998Sales

So werden z. B. durch die folgende SELECT-Anweisung Informationen zu bestimmten Monaten abgefragt.

SELECT *
FROM Year1998Sales
WHERE OrderMonth IN (5,6) AND CustomerID = 64892

Der SQL Server-Abfrageoptimierer erkennt, dass die Suchbedingung in dieser SELECT-Anweisung ausschließlich auf Zeilen in den Tabellen May1998Sales und Jun1998Sales verweist. Er begrenzt die Suche daher auf diese Tabellen.

Die Partitionierungsspalte muss Teil des Primärschlüssels der Basistabelle sein, damit Aktualisierungen für eine partitionierte Sicht durchgeführt werden können. Wenn eine Sicht nicht aktualisierbar ist, können Sie einen INSTEAD OF-Trigger für die Sicht erstellen, die Aktualisierungen zulässt. Sie sollten Fehlerbehandlung in den Trigger integrieren, damit sichergestellt wird, dass keine doppelten Zeilen eingefügt werden. Ein Beispiel für einen in eine Sicht integrierten INSTEAD OF-Trigger finden Sie unter Entwerfen von INSTEAD OF-Triggern.

CHECK-Einschränkungen sind nicht erforderlich, damit die partitionierte Sicht richtige Ergebnisse zurückgibt. Wurden jedoch keine CHECK-Einschränkungen definiert, muss der Abfrageoptimierer alle Tabellen durchsuchen und nicht nur solche, die der Suchbedingung für die Partitionsspalte entsprechen. Ohne die CHECK-Einschränkungen wird die Sicht wie jede andere Sicht mit UNION ALL behandelt. Der Abfrageoptimierer kann Informationen zu Werten, die in verschiedenen Tabellen gespeichert sind, nicht nutzen, und er kann Tabellen, die Teil der Sichtdefinition sind, nicht auslassen.

Wenn sich alle Elementtabellen, auf die von einer partitionierten Sicht verwiesen wird, auf demselben Server befinden, handelt es sich um eine lokale partitionierte Sicht. Wenn sich die Elementtabellen über mehrere Server erstrecken, ist die Sicht eine verteilte partitionierte Sicht. Verteilte partitionierte Sichten können verwendet werden, um die Last der Datenbankverarbeitung eines Systems auf eine Gruppe von Servern zu verteilen. Weitere Informationen finden Sie unter Vereinte Datenbankserver.

Partitionierte Sichten vereinfachen die unabhängige Verwaltung von Elementtabellen. So haben Sie z. B. am Ende einer bestimmten Zeitspanne folgende Möglichkeiten:

  • Die Definition der partitionierten Sicht für die aktuellen Ergebnisse kann geändert werden, um die jüngste Zeitspanne hinzuzufügen und die älteste zu löschen.
  • Die Definition der partitionierten Sicht für vergangene Ergebnisse kann geändert werden, um die soeben aus der Sicht der aktuellen Ergebnisse gelöschte Zeitspanne hinzuzufügen. Darüber hinaus kann die Sicht für vergangene Ergebnisse aktualisiert werden, um die älteste erfasste Zeitspanne zu entfernen und zu archivieren.

Wenn Sie Daten in partitionierte Sichten einfügen, können Sie mithilfe der gespeicherten Systemprozedur sp_executesql INSERT-Anweisungen mit Ausführungsplänen erstellen, die sehr wahrscheinlich in Systemen mit zahlreichen gleichzeitigen Benutzern wieder verwendet werden können.

Siehe auch

Konzepte

Erstellen von partitionierten Sichten
Erstellen von verteilten partitionierten Sichten
Entwickeln von Anwendungen für die Verwendung vereinter Datenbankserver

Andere Ressourcen

ALTER VIEW (Transact-SQL)
SELECT (Transact-SQL)
CREATE VIEW (Transact-SQL)
sp_executesql (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

17. Juli 2006

Geänderter Inhalt:
  • Die Aussage, dass lokale partitionierte Sichten lediglich aus Gründen der Abwärtskompatibilität enthalten sind und als veraltet markiert werden, wurde entfernt.