哈希
によるパーティショニングは,事前に決められた数のパーティションにデータを均等に配分するために主に使用されます。范围または列表パーティショニングでは,指定されたカラム値またはカラム値セットがどのパーティションに格納されるかを明示的に指定する必要があります。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_col
が5
から6
に変化すると,式の値が-1
に変化しますが,int_col
の値が6
から7
に変化すると,式の値が7
に変化します。
まり,カラム値と式の値のグラフが,等式y =
(ここで,c
xc
はゼロでない何らかの定数)によって描かれるような直線に近くなるほど,その式はハッシュにより適切になります。これは,式が非直線的であるほど、パーティションに対するデータの配分が不均衡になる傾向があることに関係しています。
理論上は,複数のカラム値を使用する式をプルーニングすることもできますが,そのような式のどれが適しているかを判断するのがかなり難しく,時間がかかることがあります。このため,複数のカラムを含むハッシュ式を使用することはあまり推奨されていません。
按哈希分区
が使用された場合,MySQLはユ,ザ,関数の結果の法に基づいて,全国矿工工会
パティションのうのどのパティションを使用するかを判断します。まり,式expr
の場合,レコ,ドが格納されるパ,ティションは,パ,ティション番号N
です(ここで,
)。テブルN
=国防部(expr
,全国矿工工会
)t1
が次のように4のパように定義されているとします。
CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE)
t1
にcol3
値が“2005-09-15”
であるレコ,ドを挿入した場合,それが格納されるパ,ティションは次のように判断されます。
Mod (year ('2005-09-01'),4) = Mod (2005,4) = 1
MySQL 5.6はパーティション化されたテーブルに挿入される新しい行の配置を判断するために,より複雑なアルゴリズムを使用する線形ハッシュと呼ばれる,哈希
パ,ティショニングのバリアントもサポ,トします。このアルゴリズムにいては,セクション19.2.4.1 "线性哈希パ,ティショニング"を参照してください。
ユ,ザ,関数は,レコ,ドが挿入または更新されるたびに評価されます。状況によっては,レコ,ドが削除されるときにも評価されることがあります。
パ,ティション化されるテ,ブルに独特的
キ,がある場合,哈希
ユ,ザ,関数または关键
のcolumn_list
に引数として指定するカラムは,そのキ,の一部である必要があります。