パーティション テーブルとパーティション インデックスの概念

パーティション分割を行うと、データ コレクションの整合性を維持しながら、データのサブセットに対するアクセスや管理を迅速かつ効率的に行うことができるので、大きなテーブルやインデックスを管理しやすくなります。OLTP システムから OLAP システムへのデータの読み込みなどの操作は、以前のバージョンの SQL Server では数分から数時間かかっていましたが、パーティション分割を使用することで、数秒で実行されるようになります。メンテナンス操作も、データのサブセットに対して実行することにより、テーブル全体ではなく必要なデータのみを対象にできるので効率化されます。

注意

パーティション テーブルとパーティション インデックスは、SQL Server の Enterprise Edition、Developer Edition、および Evaluation Edition でのみ使用できます。

パーティション テーブルとパーティション インデックスのデータは、データベース内の複数のファイル グループに分散できるように、複数の単位に分割されます。行のグループが各パーティションにマップされるように、データは行方向にパーティション分割されます。パーティション分割されたデータでクエリや更新が実行されるときは、パーティション テーブルまたはパーティション インデックスが 1 つの論理エンティティとして扱われます。1 つのインデックスまたはテーブルのすべてのパーティションは、同じデータベース内に存在する必要があります。

パーティション テーブルとパーティション インデックスでは、制約、既定値、ID 値、タイムスタンプ値、トリガーなど、標準的なテーブルやインデックスの設計とクエリに関連するすべてのプロパティと機能がサポートされます。したがって、サーバーに対してローカルなパーティション ビューを実装するのであれば、代わりにパーティション テーブルを実装することもできます。

パーティション分割を実装するかどうかの判断は、主に、テーブルのサイズ、テーブルのサイズの増加度、使用方法、ユーザーのクエリやメンテナンス操作に対するパフォーマンスの程度によって異なります。

一般に、大きなテーブルが次の両方の条件を満たしている場合は、パーティション分割に適しています。

  • さまざまな用途で使用されるデータが大量にテーブルに含まれているか、含まれることが予想される場合。

  • テーブルに対するクエリまたは更新が想定どおりに実行されないか、メンテナンス コストがあらかじめ定めたメンテナンス期間を超える場合。

たとえば、今月のデータは主に INSERT、UPDATE、DELETE、および MERGE の各操作で使用され、それ以前の月のデータは主に SELECT クエリで使用される場合、月ごとにパーティション分割されていると、このテーブルの管理がより簡単になります。このような利点は、データのサブセットにのみテーブルの定期メンテナンス操作を行う場合に、特に当てはまります。テーブルがパーティション分割されていないと、このような操作によってデータセット全体で多くのリソースが使用されます。パーティション分割を使用すると、たとえば、読み取り専用データにオンラインでアクセスしながら、ある月の書き込み専用データでインデックスの再構築や断片化の解消などのメンテナンス操作を実行できます。

この例を広げて、ある月の読み取り専用データを、分析用にこのテーブルからデータ ウェアハウスのテーブルに移動するとします。すべてのテーブルが同じデータベース インスタンスに含まれていると仮定すると、パーティション分割を行うことにより、データのサブセットをすばやく切り離して、オフライン メンテナンスのステージング領域に移動後、既存のパーティション テーブルにパーティションとして追加することができます。以前のリリースでは、この種の操作に数分から数時間かかっていましたが、これを数秒で行うことができるようになります。

テーブルまたはインデックスをパーティション分割すると、頻繁に実行するクエリの種類とハードウェア構成に基づいて、パーティションが正しく設計されていれば、クエリのパフォーマンスが向上する場合があります。詳細については、「クエリのパフォーマンスを向上させるためのパーティション デザイン」を参照してください。

パーティション分割は、よく SQL Server レプリケーションとの組み合わせで使用されます。パーティションを使用すると、レプリケーション システムで管理する必要のあるデータおよびメタデータの量が有効に縮小されるため、トランザクション レプリケーションおよびマージ レプリケーションのパフォーマンスを最適化できる可能性があります。レプリケーションでは、テーブルあたり最大 1024 個のパーティションがサポートされます。詳細については、「パーティション テーブルとパーティション インデックスのレプリケート」を参照してください。

パーティション分割のソリューションを実際のデータベースに適用する方法の例として、実装可能なパーティション分割のシナリオを AdventureWorks2008R2 サンプル データベースで確認できます。このシナリオについては、「AdventureWorks2008R2 サンプル データベースのパーティション分割」で説明しています。

パーティション分割アーキテクチャ

SQL Server では、1 つのパーティションだけで構成されていても、データベース内のすべてのテーブルとインデックスがパーティション分割されていると見なされます。基本的に、テーブルとインデックスの物理アーキテクチャでは、パーティションによって構成の基本的な単位が形成されます。これは、複数のパーティションから成るテーブルとインデックスの論理アーキテクチャおよび物理アーキテクチャによって、単一のパーティション テーブルとパーティション インデックスの論理アーキテクチャと物理アーキテクチャがミラー化されることを意味します。詳細については、「テーブルとインデックスの編成」を参照してください。