私は約2Mlnのレコードを持つ大きなテーブルを持っていました。MySQLのパーティション化 - プライマリキーとユニークレコードによるエラー
私はID列をPRIMARY AUTO_INCREMENT intとしています(常にUNIQUEでなければなりません)。 私は "itear" int(4)の列を持っており、2016年から2050年までにBY RANGEを分割したいのです。ほとんどのQueryではWHERE文を1年ごとに使用しているためです。
パーティションを作成すると、 "theyear"キーがPRIMARY KEYである必要があるというエラーが表示されるので、複数列のキーPRIMARY(id、theyear)を実行するプライマリキーを編集しました。
それはすべてOKですが、私の「ID」列に、それはあまりにも「theyear」列をチェックするので、私は挿入するのであれば...、もう UNIQUEではありません。
INSERT INTO table (id, theyear) VALUES (1, 2016);
INSERT INTO table (id, theyear) VALUES (1, 2017);
それはNO ERRORを言わない、ので、 UNIQUEはidとtheyearの両方をチェックします。
「id」列でUNIQUEを失うことなくパーティション化を実装する方法はありますか?
ありがとうございました。
年に対して別の 'unique'制約を追加しようとしましたか? – cwallenpoole
私はこれをドキュメント(https://dev.mysql.com/doc/refman/5.7/en/partitioning-range.html)に基づいていますが、あなたの主キーを変更する必要はありません。 RANGEパーティション彼らが使用するすべての例には、PRIMARY KEYはありません。何か不足していますか?間違ってKEY()で分割しようとしていますか? –
なぜパーティションを作成しますか?どんなクエリがより速く実行されると思いますか?そのクエリと 'SHOW CREATE TABLE'を提供してください。私はおそらく、適切なインデックスがパーティション化より高速か高速かと主張するでしょう。おそらくインデックスはYEARで始まるでしょう。ヒント:http://mysql.rjweb.org/doc.php/partitionmaint –