Можно использовать разбиение по диапазону в целочисленном столбце.
Предполагая, что my_int_col
- это целочисленные секунды в стиле Unix, поскольку 1970-01-01
мы могли бы достигнуть ежемесячных разбиений с чем-то вроде этого:
PARTITION BY RANGE (my_int_col)
( PARTITION p20180101 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-01-01 00:00') )
, PARTITION p20180201 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-02-01 00:00') )
, PARTITION p20180301 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-03-01 00:00') )
, PARTITION p20180401 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-04-01 00:00') )
, PARTITION p20180501 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-05-01 00:00') )
, PARTITION p20180601 VALUES LESS THAN ( UNIX_TIMESTAMP('2018-06-01 00:00') )
Будьте осторожны с настройкой часового пояса сеанса.Эти литералы даты будут интерпретироваться как значения в текущем часовом поясе ... например, если вы хотите, чтобы они были в формате UTC datetime, time_zone должно быть +00: 00.
Или замените выражение UNIX_TIMESTAMP () литераломцелочисленное значение ... это то, что MySQL собирается делать с выражениями UNIX_TIMESTAMP ().
Очевидно, что вы можете называть разделы как угодно.
Примечание: для применения разбиения к существующей таблице MySQL потребует создания полной копии table, удерживая эксклюзивную блокировку на исходном столе, пока операция завершается.Таким образом, вам понадобится достаточно места на диске (диске) и время для завершения операции.
Можно создать новую таблицу, которая разбита на разделы, а затем скопировать более старые данные за раз.,Но сделайте куски разумного размера, чтобы избежать раздувания ibdata1 с большими транзакциями.А затем выполните несколько операторов RENAME TABLE, чтобы переместить старую таблицу и переместить новую таблицу.
Некоторые предостережения, которые следует отметить с многораздельными таблицами: нет поддержки внешнего ключа и нет гарантии, что многораздельная таблица дастлучшая производительность DML, чем у однораздельных таблиц.
Стратегические индексы и тщательно спланированные запросы - ключ к производительности с «очень большими» таблицами.И это верно и для секционированных таблиц.
Разбиение не является волшебной палочкой для проблем с производительностью, как хотелось бы некоторым новичкам.
Что касается создания подразделов внутри разделов, я бы не рекомендовал это.