10bet网址
MySQL 5.6リファレンスマニュアル
下载本手册
PDF(美国高级主任)- 26.8 mb
PDF (A4)- 26.8 mb


19.2.4 hashパ,ティショニング

哈希によるパーティショニングは,事前に決められた数のパーティションにデータを均等に配分するために主に使用されます。范围または列表パーティショニングでは,指定されたカラム値またはカラム値セットがどのパーティションに格納されるかを明示的に指定する必要があります。Hashパ,ティショニングでは MySQL がこれを自動的に行うため、必要なことは、ハッシュされるカラム値またはカラム値に基づく式、およびパーティション化されたテーブルがいくつのパーティションに分割されるかを指定することだけです。

哈希パ,ティショニングを使用してテ,ブルをパ,ティション化する場合は,创建表ステ,トメントに按散列划分(expr句を付加する必要があります。ここで,exprは整数を返す式です。これには,型がMySQLの整数型のいずれかであるカラムの名前を単純に指定できます。また,これのあとにはほとんどの場合分区全国矿工工会句を続けます。ここで,全国矿工工会はテブルがいくのパティションに分割されるかを表す正の整数です。

たとえば,次のステ,トメントは可以カラムにハッシュを使用し,4 .。

CREATE TABLE employees (id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT ' 99999-12-31 ', job_code INT, store_id INT)

分区句を含めない場合,パ,ティションの数はデフォルトで1となります。

分区キ,ワ,ドを使用する場合,そのあとに数を指定しないと構文エラ,になります。

整数を返すSQL式をexprに使用することもできます。たとえば,従業員が雇用された年度に基づいてパーティション化するとします。これは、次のように行うことができます。

CREATE TABLE employees (id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT ' 99999-12-31 ', job_code INT, store_id INT) PARTITION BY HASH(YEAR(hired)) PARTITION 4

exprは,定数以外のランダムではない整数値(つまり,変化するけれども決定論的であるべき)を返す必要があり,セクション19.6”パティショニングの制約と制限”で説明されている禁止された構造体を含んでいてはいけません。また,この式は行が挿入または更新(または場合によっては削除)されるたびに評価されるべきです。これは,非常に複雑な式がパフォーマンスの問題を起こすことがあることを意味します (特に、一度に多くの行に影響する操作 (バッチ挿入など) を実行するとき)。

もっとも効率的なハッシュ関数は,単一テーブルカラムに実行され,その値がカラム値に対して比例的に増加または減少するもので,これによってパーティションの範囲をプル,ニングできます。まり,式がそのベースのカラムの値に対してより密接に変化するほど、MySQL は式を HASH パーティショニングにより効率的に使用できます。

たとえば,date_col日期型のカラムである場合,式TO_DAYS (date_col)date_colの値に正比例すると表現されます。date_colの値が変わるたびに,式の値が一定の方法で変化するためです。date_colに対する式(date_col)の変化は,TO_DAYS (date_col)ほど比例的ではありません。date_colのあらゆる変化に対して(date_col)が同等に変化するとはかぎらないためです。それでも,(date_col)はハッシュ関数の良い候補の1です。date_colの一部と正比例し,date_colの変化によって(date_col)で比例的でない変化が発生することがないためです。

比較のために,型がINTであるint_colという名前のカラムがあるとします。式POW(5-int_col,3) + 6を検討してみてください。これは,int_colの値が変化したときに,式の値に比例的に変化することが保証されないため,ハッシュ関数の良い候選択肢ではありません。int_colの値が一定量で変化したときに,式の値の変化量が大きくなる可能性があります。たとえば,int_col5から6に変化すると,式の値が-1に変化しますが,int_colの値が6から7に変化すると,式の値が7に変化します。

まり,カラム値と式の値のグラフが,等式y =cx(ここで,cはゼロでない何らかの定数)によって描かれるような直線に近くなるほど,その式はハッシュにより適切になります。これは,式が非直線的であるほど、パーティションに対するデータの配分が不均衡になる傾向があることに関係しています。

理論上は,複数のカラム値を使用する式をプルーニングすることもできますが,そのような式のどれが適しているかを判断するのがかなり難しく,時間がかかることがあります。このため,複数のカラムを含むハッシュ式を使用することはあまり推奨されていません。

按哈希分区が使用された場合,MySQLはユ,ザ,関数の結果の法に基づいて,全国矿工工会パティションのうのどのパティションを使用するかを判断します。まり,式exprの場合,レコ,ドが格納されるパ,ティションは,パ,ティション番号Nです(ここで,N=国防部(expr全国矿工工会)。テブルt1が次のように4のパように定義されているとします。

CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE)

t1col3値が“2005-09-15”であるレコ,ドを挿入した場合,それが格納されるパ,ティションは次のように判断されます。

Mod (year ('2005-09-01'),4) = Mod (2005,4) = 1

MySQL 5.6はパーティション化されたテーブルに挿入される新しい行の配置を判断するために,より複雑なアルゴリズムを使用する線形ハッシュと呼ばれる,哈希パ,ティショニングのバリアントもサポ,トします。このアルゴリズムにいては,セクション19.2.4.1 "线性哈希パ,ティショニング"を参照してください。

ユ,ザ,関数は,レコ,ドが挿入または更新されるたびに評価されます。状況によっては,レコ,ドが削除されるときにも評価されることがあります。

注記

パ,ティション化されるテ,ブルに独特的キ,がある場合,哈希ユ,ザ,関数または关键column_listに引数として指定するカラムは,そのキ,の一部である必要があります。