パーティション化されたテーブルの行のサイズが、パーティション化が必要な理由である程度によって異なります。
行サイズが小さく、分割の理由が純粋な数である場合 行の数が多い場合は、どうすればよいかわかりません。
行サイズが非常に大きい場合は、次のことを考慮しましたか?
P
パーティション化されたテーブルであり、F
外部キーになる可能性のあるテーブルで参照されます。新しいテーブルX
を作成します :
CREATE TABLE `X` (
`P_id` INT UNSIGNED NOT NULL,
-- I'm assuming an INT is adequate, but perhaps
-- you will actually require a BIGINT
`F_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`P_id`, `F_id`),
CONSTRAINT `Constr_X_P_fk`
FOREIGN KEY `P_fk` (`P_id`) REFERENCES `P`.`id`
ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `Constr_X_F_fk`
FOREIGN KEY `F_fk` (`F_id`) REFERENCES `F`.`id`
ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB CHARACTER SET ascii COLLATE ascii_general_ci
そして重要なのは、テーブルP
に行を追加するためのストアドプロシージャを作成することです。 。ストアドプロシージャは、行がテーブルP
に追加されるたびに、確実に(トランザクションを使用して)確認する必要があります。 、対応する行がテーブルX
に追加されます 。 P
に行を追加することを許可してはなりません 「通常の」方法で!行を追加するためにストアドプロシージャを使用し続ける場合にのみ、参照整合性が維持されることを保証できます。 P
から自由に削除できます ただし、通常の方法で。
ここでの考え方は、テーブルのX
十分に小さい行があるので、多くの行がありますが、パーティションを作成する必要はありません。それでも、テーブルのインデックスはかなりの量のメモリを消費すると思います。
P
をクエリする必要がある場合 外部キーでは、もちろんX
をクエリします 代わりに、外部キーが実際にある場所です。