MySQL Partitioning



MySQLのパーティショニングを利用すれば、開発者やDBAはデータベース・パフォーマンスを改善し、非常に大規模なデータベースの管理を簡素化できます。 MySQLは水平パーティショニングをサポートしており、データベース内の行のまとまりを、複数のより小さなデータセットに分割して、複数のディレクトリやディスクに分散できます。

パーティショニングによって、特定の処理について、1つの大きな表ではなく小さなデータセットのみにアクセスすれば良いため、クエリーのパフォーマンスが向上します。 また、パーティショニングされた表を、別々の物理ドライブにストライプできるため、複数のパーティションが同時にアクセスされる場合の物理I/Oの競合を抑えることもできます。

さらに、パーティショニングによってデータ管理が簡素化されます。 たとえば、DBAが手動で操作しなくても、(表全体を対象とした、断片化を招くような大規模な削除操作ではなく、)パーティショニングされた表の中の特定のパーティションを、それ以外のパーティションを維持したまま削除できます。

以下のようなさまざまなパーティショニングの方法が用意されており、DBAはデータのパーティショニングを詳細に制御できます。

レンジ・パーティショニング

それぞれのパーティションに含まれる行が、ある特定の値の範囲(レンジ)にマッピングされます。 レンジ・パーティショニングは、表のパーティショニングに利用されている列に直接依存しているクエリーを頻繁に実行する場合や、単純に表を削除することで古いデータを迅速に削除する場合に便利です。

リスト・パーティショニング

リスト・パーティショニングはレンジ・パーティショニングに類似しています。大きな違いは、連続した値の範囲ではなく、DBAが事前に指定した値を基にデータを分割できる点です。

マルチカラム・パーティショニング

マルチカラム・パーティショニングでは、複数の列をパーティショニング・キーとして使用します。 この複数の列は、パーティション内に行を配置する目的にも、パーティションのプルーニング操作で行をマッチングするために確認すべきパーティションを判定する目的にも使用できます。 マルチカラム・パーティショニングは、レンジ・パーティショニングおよびリスト・パーティショニングを拡張した手法です。

ハッシュ・パーティショニング

ハッシュによるパーティショニングはおもに、事前に定義した数のパーティション間でデータを均等に分散するために使用します。 レンジ・パーティショニングやリスト・パーティショニングでは、ある列の値をどのパーティションに格納するかということを明示的に指定する必要があります。 ハッシュ・パーティショニングでは、MySQLが自動的にこの操作を実行します。そのため、必要となるDBAの作業は、ハッシュ化の対象となる列の値または列の値に基づいた式、およびパーティショニングされた表を分割するためのパーティション数を指定することだけです。

ハッシュ・パーティショニングの亜種としてリニア・ハッシュがあります。リニア・ハッシュでは、より複雑なアルゴリズムを使用してデータをパーティショニングすることで、数テラバイト規模の表を扱う際のパーティションの追加、削除、マージ、分割をはるかに高速化できます。

キー・パーティショニング

キーによるパーティショニングはハッシュによるパーティショニングと類似していますが、データの均等分散のために、ハッシュ・パーティショニングではユーザー定義の式が使用されるのに対して、キー・パーティショニングではシステムが生成するハッシュ・キーが使用されます。 キー・パーティショニングでは、より多くの種類のデータ型をパーティショニングに使用できます。

サブ・パーティショニング

サブ・パーティショニングでは、パーティショニングされた表内部のそれぞれのパーティションをさらに分割でき、特に大規模な表で使用することを目的としています。この方法では、多数のサーバーやディスクにデータと索引を分散できます。

パーティション・プルーニング

クエリー内で適切な"WHERE"句または"ON"句を使用することで、MySQLオプティマイザに、一致する値が存在するパーティションにのみアクセスさせることが可能です。 その結果、パーティショニングしていない表に対して同じクエリーを実行した場合と比較して、クエリーの実行速度を飛躍的に改善できます。

その他のリソース