mySQLキー分割に用いるグリッド-コントロール(柱)
-
20-09-2019 - |
質問
皆様にお伝えしたくて書き込みデータの倉庫にMySQLを使用していないため、完全なものです。-いパーティショニングテーブルに基づく二つの整数Idと名前を文字列になります。だったので(部品)のmySQLの文書に関するニるようになったように最適なパーティショニングスキーマではこのシナリオにつきましては、ハッシュまたはキー入手できます。
して選出されたキー分割が(chickedと)った責任援する"視覚フィードバック'ハッシュアルゴリズムのための私の分野ではなく、頼りにMySQLのハッシュキーを生成するのに必要なハッシュ.
いて以下に、スニペットのスキーマ、テーブルのようにパーティショニングの複合化による以下の分野:
学校id course_id,ssname(学名).
余談ですが、前にも指摘ではないことは保校関連の情報によって詐欺サイトだと思いると指摘していいのみを使用の場合は以下のとしてうに思います。
私の現在のCREATE TABLEステートメントは以下のようなものです:
CREATE TABLE foobar (
id int UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
school_id int UNSIGNED NOT NULL,
course_id int UNSIGNED NOT NULL,
ssname varchar(64) NOT NULL,
/* some other fields */
FOREIGN KEY (school_id) REFERENCES school(id) ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (course_id) REFERENCES course(id) ON DELETE RESTRICT ON UPDATE CASCADE,
INDEX idx_fb_si (school_id),
INDEX idx_fb_ci (course_id),
CONSTRAINT UNIQUE INDEX idx_fb_scs (school_id,course_id,ssname(16))
) ENGINE=innodb;
知りたいと思い方法の変更の計算書上のように割りに三つの分野に述べた当初はこの問題(国-school_id,course_idの開始の学生の姓).
別の質問お願いしたいです:
ここではエッジの状況とえば、私の挿入を試みの記録を含む有効な*school_id,course_idまたは姓-おける元テーブルファイルが存在しまmySQLを自動的に作成、配下のファイルです。?
その代表例です。私は、以下の学校ニューヨークKindergaten、ベルファスト校は、次の授業科目:リー代数にInfitesmal寸法絡体
もいい、以下の留学生(苗字):ブッシュ、ブレアフセイン大統領
私は新しい学校(またはコース、または学生できまに挿入し、foobar表(実際には思えません).私はそのforsee加の学校、コース等、mySQLを作成追加テーブルの裏方としてのハッシュを生成する新しいキー).
うすればいい経験がこの地域で確認できる(好ましくはリンクバックを主張、私の理解するなどのマニュアルの管理が必要な場合を追加する新しい学校、コース学生のデータベース)は、正しい。
あまりないと思いますかだと思うした成形(クリア)。ない場合には、嬉しい明る。
*有効により有効であること"を意味します有効的な参考ます。
解決
かりではないように思ンジパーティショニングは、大いに役立てられるようにします。とはいえ、あのその他の問題にうまい(注:全体の回答に適用されMySQL5;バージョン6が異なる場合が):
- 使用されるカラムの主要分割する必要の一部にその有効なタイプを利用します。
school_id
,course_id
やssname
の一部ではありませんその有効なタイプを利用します。 - より一般的には、ユニークキーの主キー)を含む全てのカラムの仕切り1.このときパーティションの交差点のカラムの鍵となります。おとえば、交差点が残り少なくなりました。
- 多分割構成のその他のキーを必要とする整数やnull値です。NULLでない場合、
ssname
申し訳ありませんの整数値です。 - 外部キーを分割すな対応を同時に2.この強い引数を使用しない入手できます。
幸いなことに、衝突無料のハッシュすることだと思うので心配で分割を果衝突(なんて、単一の行の各パーティショニング).れば無視する上記の問題などの 制限機能を使用パーティショニング表現, することができるハッシュゼーション:
CREATE TABLE foobar (
...
) ENGINE=innodb
PARTITION BY HASH (school_id + course_id + ORD(ssname))
PARTITIONS 2
;
何をするべきです:
CREATE TABLE foobar (
id int UNSIGNED NOT NULL AUTO_INCREMENT,
school_id int UNSIGNED NOT NULL,
course_id int UNSIGNED NOT NULL,
ssname varchar(64) NOT NULL,
/* some other fields */
PRIMARY KEY (id, school_id, course_id),
INDEX idx_fb_si (school_id),
INDEX idx_fb_ci (course_id),
CONSTRAINT UNIQUE INDEX idx_fb_scs (school_id,course_id,ssname)
) ENGINE=innodb
PARTITION BY HASH (school_id + course_id)
PARTITIONS 2
;
または:
CREATE TABLE foobar (
id int UNSIGNED NOT NULL AUTO_INCREMENT,
school_id int UNSIGNED NOT NULL,
course_id int UNSIGNED NOT NULL,
ssname varchar(64) NOT NULL,
/* some other fields */
PRIMARY KEY (id, school_id, course_id, ssname),
INDEX idx_fb_si (school_id),
INDEX idx_fb_ci (course_id),
CONSTRAINT UNIQUE INDEX idx_fb_scs (school_id,course_id,ssname)
) ENGINE=innodb
PARTITION BY KEY (school_id, course_id, ssname)
PARTITIONS 2
;
としてのファイルの内カンパニーのヘルスケア、テーブルMySOLを作成して、こで定義するときに表時点ではなく、行が挿入されます。必要な心配はどのようにMySQLを管理します。この数に限りがございますのでパーティションは、定義されているときにテーブルを作成し、 PARTITIONS *n*
を提供しています。