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.
Hinweis: |
---|
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 |
|