このセクションでは特に、パーティショニング式で使用される関数に関連する、MySQL パーティショニングの制限について説明します。
パーティション化式で使用できるのは、次のリストに示す MySQL 関数のみです:
ABS()
CEILING()
(CEILING() および FLOOR()を参照してください)DATEDIFF()
DAY()
DAYOFMONTH()
DAYOFWEEK()
DAYOFYEAR()
EXTRACT()
(WEEK 指定子付きの EXTRACT() 関数を参照してください)FLOOR()
(CEILING() および FLOOR()を参照してください)HOUR()
MICROSECOND()
MINUTE()
MOD()
MONTH()
QUARTER()
SECOND()
TIME_TO_SEC()
TO_DAYS()
TO_SECONDS()
UNIX_TIMESTAMP()
(TIMESTAMP
カラムを含む)WEEKDAY()
YEAR()
YEARWEEK()
MySQL 8.0 では、TO_DAYS()
, TO_SECONDS()
, YEAR()
および UNIX_TIMESTAMP()
関数でパーティションプルーニングがサポートされています。 詳細は、セクション24.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
システム変数の値に依存します。 このため、ユニットを WEEK
として指定した場合、EXTRACT()
はパーティション化関数として許可されません。 (Bug #54483)
これらの関数の戻り型についての詳細は、セクション12.6.2「数学関数」およびセクション11.1「数値データ型」を参照してください。