0

基本的に次のようなテーブルがあります。

CREATE TABLE myTable (
    id INT auto_increment,
    field1 TINYINT,
    field2 CHAR(2),
    field3 INT,
    theDate DATE,
    otherStuff VARCHAR(20)
    PRIMARY KEY (id)
    UNIQUE KEY (field1, field2, field3)
)

月と年に基づいてテーブルを分割したいのですtheDate、マニュアルには許可されていないと書かれています。

パーティション化されたテーブルのパーティション化式で使用されるすべての列は、テーブルが持つ可能性のあるすべての一意のキーの一部である必要があります。つまり、テーブルのすべての一意のキーは、テーブルのパーティショニング式のすべての列を使用する必要があります

ここでの私のオプションは何ですか?それでもテーブルを分割できますか?

4

3 に答える 3

3

この問題に関するブログ投稿をここに書きました。MySQLテーブルパーティショニングを使用したRailsのスケーリング(railsは整数PKを使用します)。残念ながら、[field1、field2、field3]の一意のキーを削除する必要があることを除いて、同じ手法が機能するはずです。

一意のキーを削除することも私が対処した問題でした(投稿には記載されていませんが)。レコードを作成する前に存在チェックを実装することで回避しましたが、競合状態のために時々重複が発生する可能性があることに気付きました。実際には、それは問題ではありませんでした。ただし、クエリスループットの向上には、innodbバッファサイズのスケールアップが必要でした。これは、I/Oが残酷であるためです。

于 2009-12-09T01:13:55.423 に答える
0

いいえ、現在の形式ではありません。

主キーを削除して、代わりに「id」を通常のインデックスにすることができます。セカンダリ一意インデックスは依然として問題であり、これを削除するか、パーティションスキームを変更してDate列を含める必要があります。

于 2009-12-03T03:53:48.713 に答える
0

日時列の年と月に基づいてパーティションを作成している場合、年と月のコンボごとにテーブルを作成してから、マージテーブルを使用することを検討しましたか?私はこれがあなたの質問に直接答えないことを知っています、しかしそれが役立つかもしれないと思いました...

于 2009-12-03T04:04:53.483 に答える