Partitioned Tables and IndexesPartitioned Tables and Indexes

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL Server unterstützt die Tabellen- und Indexpartitionierung.supports table and index partitioning. Die Daten partitionierter Tabellen und Indizes werden in Einheiten aufgeteilt, die über mehrere Dateigruppen in einer Datenbank verteilt sein können.The data of partitioned tables and indexes is divided into units that can be spread across more than one filegroup in a database. Die Daten werden horizontal partitioniert, sodass Gruppen von Zeilen einzelnen Partitionen zugeordnet werden.The data is partitioned horizontally, so that groups of rows are mapped into individual partitions. Alle Partitionen eines einzelnen Indexes oder einer Tabelle müssen sich in der gleichen Datenbank befinden.All partitions of a single index or table must reside in the same database. Die Tabelle oder der Index wird als einzelne logische Entität behandelt, wenn Abfragen oder Aktualisierungen für die Daten ausgeführt werden.The table or index is treated as a single logical entity when queries or updates are performed on the data. Vor SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 waren partitionierte Tabellen und Indizes nicht in jeder Edition von SQL ServerSQL Server verfügbar.Prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1, partitioned tables and indexes were not available in every edition of SQL ServerSQL Server. Eine Liste der Funktionen, die von den SQL ServerSQL Server-Editionen unterstützt werden, finden Sie unter Editionen und unterstütze Funktionen für den SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

Wichtig

SQL Server 2017SQL Server 2017 unterstützt standardmäßig bis zu 15.000 Partitionen.supports up to 15,000 partitions by default. In früheren Versionen als SQL Server 2012 (11.x)SQL Server 2012 (11.x) wurde die Anzahl der Partitionen standardmäßig auf 1.000 beschränkt.In versions earlier than SQL Server 2012 (11.x)SQL Server 2012 (11.x), the number of partitions was limited to 1,000 by default. Auf x86-basierten Systemen ist das Erstellen einer Tabelle oder eines Indexes mit mehr als 1.000 Partitionen möglich, wird aber nicht unterstützt.On x86-based systems, creating a table or index with more than 1,000 partitions is possible, but is not supported.

Vorteile der PartitionierungBenefits of Partitioning

Das Partitionieren großer Tabellen oder Indizes kann die folgenden Vorteile bei der Verwaltung und Leistung haben.Partitioning large tables or indexes can have the following manageability and performance benefits.

  • Sie können Teilmengen von Daten schnell und effizient übertragen und darauf zugreifen, während die Integrität der Datensammlung erhalten bleibt.You can transfer or access subsets of data quickly and efficiently, while maintaining the integrity of a data collection. So dauert beispielsweise ein Vorgang wie das Laden von Daten von einem OLTP-System in ein OLAP-System nur Sekunden, statt Minuten und Stunden, wenn die Daten nicht partitioniert sind.For example, an operation such as loading data from an OLTP to an OLAP system takes only seconds, instead of the minutes and hours the operation takes when the data is not partitioned.

  • Sie können Wartungsvorgänge für eine oder mehrere Partitionen schneller ausführen.You can perform maintenance operations on one or more partitions more quickly. Die Vorgänge sind effizienter, da sie auf nur diese Datenteilmengen abzielen, statt auf die ganze Tabelle.The operations are more efficient because they target only these data subsets, instead of the whole table. Sie können z. B. wählen, Daten in einer oder mehreren Partitionen zu komprimieren oder eine oder mehrere Partitionen eines Indexes neu zu erstellen.For example, you can choose to compress data in one or more partitions or rebuild one or more partitions of an index.

  • Die Abfrageleistung lässt sich, abhängig von den am häufigsten ausgeführten Abfragetypen sowie der Hardwarekonfiguration, möglicherweise verbessern.You may improve query performance, based on the types of queries you frequently run and on your hardware configuration. So kann der Abfrageoptimierer zum Beispiel Gleichheitsjoin-Abfragen zwischen zwei oder mehreren partitionierten Tabellen schneller verarbeiten, wenn die Partitionierungsspalten mit den Spalten identisch sind, über die die Tabellen verknüpft werden.For example, the query optimizer can process equi-join queries between two or more partitioned tables faster when the partitioning columns are the same as the columns on which the tables are joined. Weitere Informationen finden Sie weiter unten unter Abfragen.See Queries below for further information.

Beim Sortieren von Daten nach E-A-Operationen geht SQL ServerSQL Server zunächst nach Partitionen vor.When SQL ServerSQL Server performs data sorting for I/O operations, it sorts the data first by partition. SQL ServerSQL Server greift jeweils auf ein Laufwerk zu, wodurch sich die Leistung möglicherweise verringert.accesses one drive at a time, and this might reduce performance. Um die Leistung beim Sortieren von Daten zu verbessern, verteilen Sie die Datendateien der Partitionen über mehrere Datenträger, d. h. durch das Einrichten eines RAID (Redundant Array of Independent Disks).To improve data sorting performance, stripe the data files of your partitions across more than one disk by setting up a RAID. Auf diese Weise kann SQL ServerSQL Server , obwohl die Daten dabei weiterhin nach Partitionen sortiert werden, auf alle Laufwerke der einzelnen Partitionen gleichzeitig zugreifen.In this way, although SQL ServerSQL Server still sorts data by partition, it can access all the drives of each partition at the same time.

Darüber hinaus kann die Leistung verbessert werden, indem eine Sperrenausweitung auf Partitionsebene statt auf die gesamte Tabelle angewendet wird.In addition, you can improve performance by enabling lock escalation at the partition level instead of a whole table. Dies kann Sperrenkonflikte für die Tabelle reduzieren.This can reduce lock contention on the table. Setzen Sie die LOCK_ESCALATION-Option der ALTER TABLE-Anweisung auf AUTO, um eine Sperrenausweitung auf die Partition zuzulassen und damit Sperrenkonflikte zu verringern.To reduce lock contention by allowing lock escalation to the partition, set the LOCK_ESCALATION option of the ALTER TABLE statement to AUTO.

Komponenten und KonzepteComponents and Concepts

Die folgenden Begriffe beziehen sich auf die Tabellen- und Indexpartitionierung.The following terms are applicable to table and index partitioning.

PartitionsfunktionPartition function

Ein Datenbankobjekt, das definiert, wie die Zeilen einer Tabelle oder eines Index basierend auf den Werten bestimmter Spalten, den sogenannten Partitionierungsspalten, einem Satz von Partitionen zugeordnet werden.A database object that defines how the rows of a table or index are mapped to a set of partitions based on the values of certain column, called a partitioning column. Das heißt, die Partitionsfunktion definiert die Anzahl von Partitionen, über die die Tabelle verfügt, und wie die Begrenzungen der Partitionen definiert werden.That is, the partition function defines the number of partitions that the table will have and how the boundaries of the partitions are defined. Angenommen, Sie verfügen über eine Tabelle, die Verkaufsauftragsdaten enthält, und möchten die Tabelle möglicherweise in zwölf (monatliche) Partitionen auf Grundlage einer datetime -Spalte (z.B. Verkaufsdatum) partitionieren.For example, given a table that contains sales order data, you may want to partition the table into twelve (monthly) partitions based on a datetime column such as a sales date.

PartitionsschemaPartition scheme

Ein Datenbankobjekt, das die Partitionen einer Partitionsfunktion Dateigruppen zuordnet.A database object that maps the partitions of a partition function to a set of filegroups. Der wichtigste Grund dafür, dass Partitionen in separaten Dateigruppen platziert werden, besteht darin, sicherzustellen, dass Sie Sicherungsvorgänge unabhängig für Partitionen ausführen können.The primary reason for placing your partitions on separate filegroups is to make sure that you can independently perform backup operations on partitions. Dies liegt daran, dass Sie Sicherungen für einzelne Dateigruppen ausführen können.This is because you can perform backups on individual filegroups.

PartitionierungsspaltePartitioning column

Die Spalte einer Tabelle oder eines Indexes, die von einer Partitionsfunktion zum Partitionieren der Tabelle oder des Indexes verwendet wird.The column of a table or index that a partition function uses to partition the table or index. Berechnete Spalten, die in eine Partitionsfunktion einbezogen werden, müssen explizit als PERSISTED gekennzeichnet sein.Computed columns that participate in a partition function must be explicitly marked PERSISTED. Alle Datentypen, die zum Verwenden als Indexspalten zulässig sind, können als Partitionsspalte verwenden werden, mit Ausnahme des Datentyps timestamp.All data types that are valid for use as index columns can be used as a partitioning column, except timestamp. Die Datentypen ntext-, text-, image-, xml-, varchar(max)-, nvarchar(max) oder varbinary(max) können nicht angegeben werden.The ntext, text, image, xml, varchar(max), nvarchar(max), or varbinary(max) data types cannot be specified. Zudem können der benutzerdefinierte CLR-Typ (Common Language Runtime) von Microsoft .NET Framework und die Spalten mit dem Aliasdatentyp nicht angegeben werden.Also, Microsoft .NET Framework common language runtime (CLR) user-defined type and alias data type columns cannot be specified.

Ausgerichteter IndexAligned index

Ein Index, der auf dem gleichen Partitionsschema wie die zugehörige Tabelle aufbaut.An index that is built on the same partition scheme as its corresponding table. Wenn eine Tabelle und ihre Indizes aneinander ausgerichtet sind, kann SQL ServerSQL Server schnell zwischen Partitionen wechseln und gleichzeitig die Partitionsstruktur sowohl der Tabelle als auch ihrer Indizes beibehalten.When a table and its indexes are in alignment, SQL ServerSQL Server can switch partitions quickly and efficiently while maintaining the partition structure of both the table and its indexes. Ein Index muss nicht an derselben benannten Partitionsfunktion beteiligt sein, um an ihrer Basistabelle ausgerichtet zu sein.An index does not have to participate in the same named partition function to be aligned with its base table. Allerdings müssen die Partitionsfunktionen des Indexes und der Basistabelle im Wesentlichen identisch sein, d.h.:However, the partition function of the index and the base table must be essentially the same, in that:

  1. Die Argumente der Partitionsfunktionen müssen denselben Datentyp besitzen.The arguments of the partition functions have the same data type.
  2. Sie definieren dieselbe Anzahl an Partitionen.They define the same number of partitions.
  3. Sie definieren dieselben Begrenzungswerte für Partitionen.They define the same boundary values for partitions.

Partitionieren gruppierter IndizesPartitioning Clustered Indexes

Beim Partitionieren eines gruppierten Index muss der Gruppierungsschlüssel die Partitionierungsspalte enthalten.When partitioning a clustered index, the clustering key must contain the partitioning column. Wenn beim Partitionieren eines nicht eindeutigen gruppierten Index die Partitionierungsspalte nicht explizit im Gruppierungsschlüssel angegeben ist, fügt SQL ServerSQL Server die Partitionierungsspalte standardmäßig zur Liste der gruppierten Indexschlüssel hinzu.When partitioning a nonunique clustered index, and the partitioning column is not explicitly specified in the clustering key, SQL ServerSQL Server adds the partitioning column by default to the list of clustered index keys. Wenn der gruppierte Index eindeutig ist, müssen Sie explizit angeben, dass der gruppierte Indexschlüssel die Partitionierungsspalte enthält.If the clustered index is unique, you must explicitly specify that the clustered index key contain the partitioning column.

Partitionieren nicht gruppierter IndizesPartitioning NonClustered Indexes

Beim Partitionieren eines eindeutigen nicht gruppierten Index muss der Indexschlüssel die Partitionierungsspalte enthalten.When partitioning a unique nonclustered index, the index key must contain the partitioning column. Beim Partitionieren eines nicht eindeutigen, nicht gruppierten Index fügt SQL ServerSQL Server die Partitionierungsspalte standardmäßig als eine Nichtschlüsselspalte (eingeschlossene Spalte) des Indexes hinzu, um sicherzustellen, dass der Index an der Basistabelle ausgerichtet ist.When partitioning a nonunique, nonclustered index, SQL ServerSQL Server adds the partitioning column by default as a nonkey (included) column of the index to make sure the index is aligned with the base table. SQL ServerSQL Server fügt die Partitionierungsspalte nicht zum Index hinzu, wenn sie bereits im Index vorhanden ist.does not add the partitioning column to the index if it is already present in the index.

Nicht ausgerichteter IndexNon-aligned index

Ein Index, der unabhängig von der zugehörigen Tabelle partitioniert ist.An index partitioned independently from its corresponding table. Das heißt, der Index hat ein anderes Partitionsschema oder wird in einer anderen Dateigruppe als die Basistabelle platziert.That is, the index has a different partition scheme or is placed on a separate filegroup from the base table. Das Entwerfen eines nicht ausgerichteten partitionierten Indexes kann in den folgenden Fällen nützlich sein:Designing an non-aligned partitioned index can be useful in the following cases:

  • Die Basistabelle ist nicht partitioniert.The base table has not been partitioned.
  • Der Indexschlüssel ist eindeutig und enthält nicht die Partitionierungsspalte der Tabelle.The index key is unique and it does not contain the partitioning column of the table.
  • Sie möchten die Basistabelle an angeordneten Joins mit weiteren Tabellen beteiligen, die unterschiedliche Joinspalten verwenden.You want the base table to participate in collocated joins with more tables using different join columns.

PartitionsentfernungPartition elimination

Der Prozess, durch den der Abfrageoptimierer nur auf relevante Partitionen zugreift, um die Filterkriterien der Abfrage zu erfüllen.The process by which the query optimizer accesses only the relevant partitions to satisfy the filter criteria of the query.

LeistungsrichtlinienPerformance Guidelines

Die neue, höhere Grenze von 15.000 Partitionen wirkt sich auf den Arbeitsspeicher, Vorgänge mit partitionierten Indizes, DBCC-Befehle und Abfragen aus.The new, higher limit of 15,000 partitions affects memory, partitioned index operations, DBCC commands, and queries. In diesem Abschnitt werden die Auswirkungen auf die Leistung beschrieben, wenn die Anzahl der Partitionen mehr als 1.000 beträgt, und es werden mögliche Problemumgehungen bereitgestellt.This section describes the performance implications of increasing the number of partitions above 1,000 and provides workarounds as needed. Dadurch, dass die maximale Anzahl von Partitionen auf 15.000 erhöht wurde, können Sie Daten über einen längeren Zeitraum speichern.With the limit on the maximum number of partitions being increased to 15,000, you can store data for a longer time. Sie sollten Daten jedoch nur so lange beibehalten, wie sie benötigt werden, und darauf achten, dass die Leistung und die Anzahl der Partitionen ausgewogen ist.However, you should retain data only for as long as it is needed and maintain a balance between performance and number of partitions.

Richtlinien für Prozessorkerne und die Anzahl der PartitionenProcessor Cores and Number of Partitions Guidelines

Zur Maximierung der Leistung paralleler Vorgänge wird empfohlen, die gleiche Anzahl von Partitionen und Prozessorkernen und bis zu einem Maximum von 64 zu verwenden (was die maximal zulässige Anzahl paralleler Prozessoren ist, die SQL ServerSQL Server nutzen kann).To maximize performance with parallel operations, we recommend that you use the same number of partitions as processor cores, up to a maximum of 64 (which is the maximum number of parallel processors that SQL ServerSQL Server can utilize).

Speicherauslastung und RichtlinienMemory Usage and Guidelines

Es empfiehlt sich, mindestens 16 GB Arbeitsspeicher zu verwenden, wenn eine große Anzahl von Partitionen verwendet wird.We recommend that you use at least 16 GB of RAM if a large number of partitions are in use. Wenn das System nicht über ausreichend Arbeitsspeicher verfügt, kann es bei DML-Anweisungen (Datenbearbeitungssprache), DDL-Anweisungen (Datendefinitionssprache) und anderen Vorgängen aufgrund ungenügenden Arbeitsspeichers zu Fehlern kommen.If the system does not have enough memory, Data Manipulation Language (DML) statements, Data Definition Language (DDL) statements and other operations can fail due to insufficient memory. Bei Systemen mit 16 GB Arbeitsspeicher, die zahlreiche speicherintensive Prozesse ausführen, kann es bei Vorgängen, die für eine große Anzahl von Partitionen ausgeführt werden, zu Fehlern aufgrund von Speicherauslastung kommen.Systems with 16 GB of RAM that run many memory-intensive processes may run out of memory on operations that run on a large number of partitions. Je mehr Arbeitsspeicher Sie über die empfohlenen 16 GB hinaus verwenden, desto geringer ist die Wahrscheinlichkeit, dass Probleme mit der Leistung und Speicherauslastung auftreten.Therefore, the more memory you have over 16 GB, the less likely you are to encounter performance and memory issues.

Arbeitsspeichereinschränkungen können sich negativ auf die Leistung oder auf die Möglichkeit von SQL ServerSQL Server zum Erstellen eines partitionierten Index auswirken.Memory limitations can affect the performance or ability of SQL ServerSQL Server to build a partitioned index. Das gilt insbesondere für den Fall, wenn der Index nicht an seiner Basistabelle oder an deren gruppierten Index ausgerichtet ist, sofern für die Tabelle bereits ein gruppierter Index erstellt wurde.This is especially the case when the index is not aligned with its base table or is not aligned with its clustered index, if the table already has a clustered index applied to it. In diesem Fall ist es möglicherweise sinnvoll, die Serverkonfigurationsoption „Speicher für Indexerstellung“ heraufzusetzen.In this case, it may be useful to increase the index create memory Server Configuration Option. Weitere Informationen finden Sie unter Konfigurieren der Serverkonfigurationsoption Speicher für Indexerstellung.For more information, refer to Configure the index create memory Server Configuration Option.

Vorgänge für partitionierte IndizesPartitioned Index Operations

Das Erstellen bzw. Neuerstellen von nicht ausgerichteten Indizes für eine Tabelle mit mehr als 1.000 Partitionen ist möglich, wird aber nicht unterstützt.Creating and rebuilding non-aligned indexes on a table with more than 1,000 partitions is possible, but is not supported. Dies hätte Leistungseinbußen oder eine zu hohe Speicherauslastung während der Vorgänge zur Folge.Doing so may cause degraded performance or excessive memory consumption during these operations.

Das Erstellen und Neuerstellen von ausgrichteten Indizes kann um so länger dauern, je mehr Partitionen hinzugefügt werden.Creating and rebuilding aligned indexes could take longer to execute as the number of partitions increases. Es empfiehlt sich, nicht mehrere Befehle zum Erstellen und Neuerstellen von Befehlen gleichzeitig auszuführen, da es zu Leistungs- und Arbeitsspeicherproblemen kommen kann.We recommend that you do not run multiple create and rebuild index commands at the same time as you may run into performance and memory issues.

Wenn SQL ServerSQL Server Sortiervorgänge zum Erstellen partitionierter Indizes durchführt, erstellt es zuerst eine Sortiertabelle für jede Partition.When SQL ServerSQL Server performs sorting to build partitioned indexes, it first builds one sort table for each partition. Anschließend werden die Sortiertabellen entweder in der jeweiligen Dateigruppe jeder Partition oder in tempdb erstellt, wenn die SORT_IN_TEMPDB-Indexoption angegeben wurde.It then builds the sort tables either in the respective filegroup of each partition or in tempdb if the SORT_IN_TEMPDB index option is specified. Jede Sortiertabelle setzt für ihre Erstellung eine Mindestmenge an Arbeitsspeicher voraus.Each sort table requires a minimum amount of memory to build. Wenn Sie einen partitionierten Index erstellen, der an seiner Basistabelle ausgerichtet ist, werden alle Sortiertabellen nacheinander erstellt, was weniger Arbeitsspeicher in Anspruch nimmt.When you are building a partitioned index that is aligned with its base table, sort tables are built one at a time, using less memory. Wenn Sie allerdings einen nicht gruppierten partitionierten Index erstellen, werden alle Sortiertabellen gleichzeitig erstellt.However, when you are building a nonaligned partitioned index, the sort tables are built at the same time. Das heißt, es muss ausreichend Arbeitsspeicher verfügbar sein, um diese gleichzeitigen Sortiervorgänge zu verarbeiten.As a result, there must be sufficient memory to handle these concurrent sorts. Je größer die Anzahl der Partitionen, desto mehr Arbeitsspeicher wird benötigt.The larger the number of partitions, the more memory required. Die Mindestgröße für jede Sortiertabelle beträgt 40 Seiten für jede Partition mit 8 Kilobyte pro Seite.The minimum size for each sort table, for each partition, is 40 pages, with 8 kilobytes per page. So beansprucht z. B. ein nicht ausgerichteter partitionierter Index mit 100 Partitionen ausreichend Arbeitsspeicher, um 4.000 (40 * 100) Seiten gleichzeitig seriell sortieren zu können.For example, a nonaligned partitioned index with 100 partitions requires sufficient memory to serially sort 4,000 (40 * 100) pages at the same time. Wenn dieser Arbeitsspeicher verfügbar ist, ist die Erstellung zwar erfolgreich, jedoch kann die Leistung darunter leiden.If this memory is available, the build operation will succeed, but performance may suffer. Wenn dieser Arbeitsspeicher nicht verfügbar ist, schlägt die Erstellung fehl.If this memory is not available, the build operation will fail. Alternativ erfordert ein ausgerichteter partitionierter Index mit 100 Partitionen nur ausreichend Arbeitsspeicher, um 40 Seiten zu sortieren, da die Sortiervorgänge nicht gleichzeitig durchgeführt werden.Alternatively, an aligned partitioned index with 100 partitions requires only sufficient memory to sort 40 pages, because the sorts are not performed at the same time.

Sowohl bei ausgerichteten als auch bei nicht ausgerichteten Indizes kann der Arbeitsspeicherbedarf noch höher sein, wenn SQL ServerSQL Server bei einem Computer mit mehreren Prozessoren Grade der Parallelität beim Erstellungsvorgang verwendet.For both aligned and non-aligned indexes, the memory requirement can be greater if SQL ServerSQL Server is applying degrees of parallelism to the build operation on a multiprocessor computer. Denn je höher die Grade der Parallelität sind, desto größer ist auch der Arbeitsspeicherbedarf.This is because the greater the degrees of parallelism, the greater the memory requirement. Wenn SQL ServerSQL Server z. B. die Grade der Parallelität auf 4 festlegt, benötigt ein nicht ausgerichteter partitionierter Index mit 100 Partitionen ausreichend Arbeitsspeicher, damit vier Prozessoren gleichzeitig jeweils 4.000 Seiten sortieren können – also 6.000 Seiten gleichzeitig.For example, if SQL ServerSQL Server sets degrees of parallelism to 4, a nonaligned partitioned index with 100 partitions requires sufficient memory for four processors to sort 4,000 pages at the same time, or 16,000 pages. Wenn der partitionierte Index ausgerichtet ist, verringert sich der Arbeitsspeicherbedarf auf vier Prozessoren, die jeweils 40 Seiten sortieren – also 160 (4 * 40) Seiten.If the partitioned index is aligned, the memory requirement is reduced to four processors sorting 40 pages, or 160 (4 * 40) pages. Sie können die MAXDOP-Indexoption verwenden, um die Grade der Parallelität manuell zu reduzieren.You can use the MAXDOP index option to manually reduce the degrees of parallelism.

DBCC-BefehleDBCC Commands

Bei einer größeren Anzahl von Partitionen können DBCC-Befehle mehr Zeit für die Ausführung in Anspruch nehmen, während sich die Anzahl von Partitionen erhöht.With a larger number of partitions, DBCC commands could take longer to execute as the number of partitions increases.

AbfragenQueries

Abfragen, die Partitionsentfernung verwenden, weisen eine vergleichbare oder verbesserte Leistung bei einer größeren Anzahl von Partitionen auf.Queries that use partition elimination could have comparable or improved performance with larger number of partitions. Abfragen, die keine Partitionsentfernung verwenden, nehmen mehr Zeit für die Ausführung in Anspruch, wenn sich die Anzahl der Partitionen erhöht.Queries that do not use partition elimination could take longer to execute as the number of partitions increases.

Nehmen Sie beispielsweise an, eine Tabelle hat 100 Millionen Zeilen und Spalten A, Bund C.For example, assume a table has 100 million rows and columns A, B, and C.

  • In Szenario 1 ist die Tabelle in 1000 Partitionen der Spalte Aunterteilt.In scenario 1, the table is divided into 1000 partitions on column A.
  • In Szenario 2 ist die Tabelle in 10.000 Partitionen der Spalte Aunterteilt.In scenario 2, the table is divided into 10,000 partitions on column A. Eine Abfrage der Tabelle, die über eine WHERE-Klausel verfügt, die nach Spalte A filtert, führt die Partitionsentfernung aus und scannt eine Partition.A query on the table that has a WHERE clause filtering on column A will perform partition elimination and scan one partition. Die gleiche Abfrage wird in Szenario 2 möglicherweise schneller ausgeführt, da es weniger zu scannende Zeilen in einer Partition gibt.That same query may run faster in scenario 2 as there are fewer rows to scan in a partition. Eine Abfrage, die über eine WHERE-Klausel verfügt, die nach Spalte B filtert, scannt alle Partitionen.A query that has a WHERE clause filtering on column B will scan all partitions. Die Abfrage wird möglicherweise in Szenario 1 schneller als in Szenario 2 ausgeführt, da weniger Partitionen gescannt werden müssen.The query may run faster in scenario 1 than in scenario 2 as there are fewer partitions to scan.

Abfragen, die Operatoren wie TOP oder MAX/MIN für andere Spalten als die Partitionierungsspalte verwenden, erzielen aufgrund der Partitionierung möglicherweise eine geringere Leistung, da alle Partitionen ausgewertet werden müssen.Queries that use operators such as TOP or MAX/MIN on columns other than the partitioning column may experience reduced performance with partitioning because all partitions must be evaluated.

Wenn Sie häufig Abfragen ausführen, die Gleichheitsjoins zwischen mindestens zwei partitionierten Tabellen voraussetzen, sollten deren Partitionsspalten dieselben sein wie die Spalten, an denen die Tabellen verknüpft sind.If you frequently run queries that involve an equi-join between two or more partitioned tables, their partitioning columns should be the same as the columns on which the tables are joined. Außerdem sollten die Tabellen oder deren Indizes angeordnet sein.Additionally, the tables, or their indexes, should be collocated. Dies bedeutet, dass sie entweder dieselbe benannte Partitionsfunktion verwenden oder aber verschiedene Partitionsfunktionen, die sich in folgenden wesentlichen Punkten entsprechen: This means that they either use the same named partition function, or they use different ones that are essentially the same, in that they:

  • Sie besitzen dieselbe Anzahl an Parametern für die Partitionierung, und die entsprechenden Parameter sind vom selben Datentyp.Have the same number of parameters that are used for partitioning, and the corresponding parameters are the same data types.
  • Sie definieren dieselbe Anzahl an Partitionen.Define the same number of partitions.
  • Sie definieren dieselben Begrenzungswerte für Partitionen.Define the same boundary values for partitions. Dies ermöglicht dem Abfrageoptimierer, den Join schneller zu verarbeiten, da die Partitionen selbst verknüpft werden können.In this way, the query optimizer can process the join faster, because the partitions themselves can be joined. Wenn eine Abfrage zwei Tabellen verknüpft, die nicht angeordnet oder nicht am Joinsfeld miteinander verknüpft sind, kann das Vorhandensein von Partitionen die Abfrageverarbeitung womöglich sogar verlangsamen, anstatt zu beschleunigen.If a query joins two tables that are not collocated or are not partitioned on the join field, the presence of partitions may actually slow down query processing instead of accelerate it.

Das Verhalten ändert sich beim Berechnen von Statistiken, während Vorgänge für partitionierte Indizes durchgeführt werdenBehavior changes in statistics computation during partitioned index operations

Ab SQL Server 2012 (11.x)SQL Server 2012 (11.x)werden Statistiken nicht durch das Scannen aller Zeilen in der Tabelle erstellt, wenn ein partitionierter Index erstellt oder neu erstellt wird.Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), statistics are not created by scanning all the rows in the table when a partitioned index is created or rebuilt. Der Abfrageoptimierer generiert stattdessen Statistiken mithilfe des Standardalgorithmus zur Stichprobenentnahme.Instead, the query optimizer uses the default sampling algorithm to generate statistics. Nachdem eine Datenbank mit partitionierten Indizes aktualisiert wurde, bemerken Sie möglicherweise einen Unterschied in den Histogrammdaten für diese Indizes.After upgrading a database with partitioned indexes, you may notice a difference in the histogram data for these indexes. Diese Änderung des Verhaltens beeinträchtigt die Abfrageleistung möglicherweise nicht.This change in behavior may not affect query performance. Um Statistiken zu partitionierten Indizes durch das Scannen aller Zeilen in der Tabelle abzurufen, verwenden Sie CREATE STATISTICS oder UPDATE STATISTICS mit der FULLSCAN-Klausel.To obtain statistics on partitioned indexes by scanning all the rows in the table, use CREATE STATISTICS or UPDATE STATISTICS with the FULLSCAN clause.

AufgabenTasks ThemaTopic
Beschreibt das Erstellen von Partitionsfunktionen und Partitionsschemas sowie deren Anwendung auf eine Tabelle und einen Index.Describes how to create partition functions and partition schemes and then apply these to a table and index. Erstellen partitionierter Tabellen und IndizesCreate Partitioned Tables and Indexes

Die folgenden Whitepaper zu partitionierten Tabellen und Indexstrategien sowie Implementierungen sind möglicherweise für Sie interessant.You may find the following white papers on partitioned table and index strategies and implementations useful.