クエリのパフォーマンスを向上させるためのパーティション デザイン

頻繁に実行するクエリの種類とハードウェア構成に基づいて、テーブルまたはインデックスをパーティション分割すると、クエリのパフォーマンスが向上する場合があります。

結合クエリ用のパーティション分割

2 つ以上のパーティション テーブル間での等結合を行うクエリを頻繁に実行する場合、それらのテーブルのパーティション分割列は、テーブルの結合先の列と同じにする必要があります。また、等結合するテーブルまたはテーブルのインデックスを併置する必要があります。つまり、これらのテーブルでは、同じ名前のパーティション関数または名前は異なるが実質的には同じ関数のいずれかが使用されることになります。後者の場合、関数には次のような性質があります。

  • パーティション分割に使用するパラメータの数が同数で、対応するパラメータのデータ型が同じです。

  • 同数のパーティションを定義します。

  • パーティションに同じ境界値を定義します。

このような性質により、パーティション自体を結合できるので、SQL Server クエリ オプティマイザでは結合をより高速に処理できます。クエリで、併置されていないか、または結合フィールドでパーティション分割されていない 2 つのテーブルを結合すると、パーティションが存在することが原因で、クエリ処理のパフォーマンスは向上せず、低下することがあります。

複数のディスク ドライブの活用

それぞれが異なる物理ディスク ドライブにアクセスするファイル グループにパーティションをマップすると、I/O パフォーマンスが向上することがあります。SQL Server により I/O 操作用にデータの並べ替えが実行される場合、まずパーティションでデータが並べ替えられます。このようなシナリオでは、SQL Server では一度に 1 つのドライブにしかアクセスできないので、パフォーマンスが低下することがあります。パフォーマンスに関する、より適切な解決策としては、RAID を構成して複数のディスク間でパーティションのデータ ファイルをストライプすることができます。この方法を使用すると、SQL Server では今までどおりデータがパーティションで並べ替えられますが、すべてのドライブの各パーティションに同時にアクセスできるようになります。この構成は、すべてのパーティションが同じファイル グループに含まれているか、または別のファイル グループに含まれているかに関係なく実装することができます。SQL Server による各種の RAID レベルへの対応の詳細については、「RAID レベルと SQL Server」を参照してください。

ロック エスカレーションの動作の制御

テーブルをパーティション分割すると、テーブル全体ではなく 1 つのパーティションへのロックのエスカレーションを有効にしてパフォーマンスを向上させることができます。パーティションへのロックのエスカレーションを有効にしてロックの競合を減らすには、ALTER TABLE ステートメントの LOCK_ESCALATION オプションを使用します。