2016-05-04 17 views
0

DATE列を使用してデータベースをパーティション化しようとしていますが、MySQL 5.7でパーティション・プルーニングを利用しています。内部的な理由から、私はRANGE COLUMNSでパーティションを追加する必要があります。パーティションを追加/削除するのが簡単で速いからです。DATEおよびレンジ・カラムを使用したパーティション・プルーニング

the MySQL websiteは言うものの:

オプティマイザもRANGE列またはリストの列分割を使用する表の複数の列に先行するタイプの比較を含むWHERE条件でプルーニング行うことができます。

また言う:

最適化のこのタイプは、パーティショニング表現が等式のセット、またはパーティショニング表現が表すときに減少させることができる等価又は範囲から成るときはいつでも適用することができます増減関係。パーティショニング式がYEAR()またはTO_DAYS()関数を使用する場合は、DATEまたはDATETIME列でパーティション化された表に対しても、プルーニングを適用できます。さらに、MySQL 5.7では、パーティショニング式がTO_SECONDS()関数を使用するときに、そのようなテーブルにプルーニングを適用できます。

これは矛盾しているようです。 DATE列を次のようにパーティション化することが可能かどうか疑問に思っています。

PARTITION BY RANGE COLUMNS(date) (
    PARTITION partition_2016_04_28 VALUES LESS THAN ('2016-04-28'), 
    PARTITION partition_2016_04_29 VALUES LESS THAN ('2016-04-29'), 
    PARTITION partition_2016_04_30 VALUES LESS THAN ('2016-04-30') 
); 

さらに、パーティションプルーニングを利用しますか? TO_DAYS関数を避けたいのは、できるだけテーブルをきれいにして使いやすくするためです。何かご意見は?

+0

私は、 'PARTITION BY RANGE(TO_DAYS(日付))... LESS THAN(TO_DAYS('2016-04-28 '))'はあまり面倒ではないことを示唆しています。 [Partitioning tips](http://mysql.rjweb.org/doc.php/partitionmaint)。 –

答えて

0

自分のテーブルを作成して独自のクエリを書きました。 EXPLAIN PARTITIONSを使用すると、このメソッドを使用して日付をパーティション化すると、実際にパーティションプルーニングが使用されることがわかりました。

関連する問題