このセクションでは特に、パーティショニング式で使用される関数に関連する、MySQL パーティショニングの制限について説明します。
次の表に示されている MySQL 関数のみがパーティショニング式で許可されます。
ABS() |
CEILING() (CEILING() および FLOOR()を参照してください) |
DAY() |
DAYOFMONTH() |
DAYOFWEEK() |
DAYOFYEAR() |
DATEDIFF() |
EXTRACT() (WEEK 指定子付きの EXTRACT() 関数を参照してください) |
FLOOR() (CEILING() および FLOOR()を参照してください) |
HOUR() |
MICROSECOND() |
MINUTE() |
MOD() |
MONTH() |
QUARTER() |
SECOND() |
TIME_TO_SEC() |
TO_DAYS() |
TO_SECONDS() |
UNIX_TIMESTAMP() (TIMESTAMP カラムで、MySQL 5.6.1 から許可され、MySQL 5.6.3 から完全にサポートされています) |
WEEKDAY() |
YEAR() |
YEARWEEK() |
MySQL 5.6 では、TO_DAYS()
、TO_SECONDS()
、および YEAR()
関数で範囲最適化を使用できます。また、MySQL 5.6.3 以降では、UNIX_TIMESTAMP()
はパーティショニング式で単調として扱われます。詳細は、セクション19.4「パーティションプルーニング」を参照してください。
CEILING() および FLOOR()
これらの各関数は、正確な数値型 (INT
型または DECIMAL
型のいずれかなど) の引数を渡された場合にのみ整数を返します。これはたとえば、次の CREATE TABLE
ステートメントがここで示すようにエラーで失敗することを意味します。
mysql> CREATE TABLE t (c FLOAT) PARTITION BY LIST( FLOOR(c) )(
-> PARTITION p0 VALUES IN (1,3,5),
-> PARTITION p1 VALUES IN (2,4,6)
-> );
ERROR 1490 (HY000): The PARTITION function returns the wrong type
WEEK 指定子付きの EXTRACT() 関数
EXTRACT()
関数によって返される値は、EXTRACT(WEEK FROM
として使用されるときに、col
)default_week_format
システム変数の値に依存します。このため、MySQL 5.6.2 以降では、EXTRACT()
は、単位を WEEK
として指定するときに、パーティショニング関数として許可されなくなりました (Bug #54483)。
これらの関数の戻り型についての詳細は、セクション12.6.2「数学関数」およびセクション11.2「数値型」を参照してください。