В ситуациях, когда мне нужны как «текущие» данные, так и «история», это то, что я делаю - одна таблица с текущими данными и одна с историей. Возможно, они по-разному индексируются для разного использования и т. Д.
Я бы подумал, что отличается между "историей" и "текущим", а затем сделал бы таблицы разными не идентичными .
Когда появится новая запись (или 20K строк в вашем случае), я, по крайней мере, добавлю ее в Current
. Я также могу записать его в History
, тем самым сохраняя его полным (за счет небольшой избыточности). Или я могу переместить ряд (ы) в History
, когда следующий ряд (ы) войдет в Current
.
Я не вижу необходимости в PARTITIONing
, если только я не собираюсь удалять «старые» данные. В этом случае я бы использовал PARTITION BY RANGE(TO_DAYS(..))
и выбрал бы еженедельно / ежемесячно / что угодно, чтобы число разделов не превышало 50. (Если вы выберете «ежедневно», History
через несколько месяцев замедлится, просто потому, что разбиения.)
20К строк каждый день - многие из них не изменились со вчерашнего дня? Это, вероятно, не правильный способ делать вещи. Пожалуйста, опишите, что происходит каждый день. Вам следует избегать дублирования строк в History
(кроме даты).