(Фокус на старых и новых данных)
Если таблица упорядочена в некотором хронологическом порядке, и вы в основном обращаетесь к «новым» данным, то значительное количество кэширования и производительность, которую он дает, встроены автоматически.
Обязательно используйте InnoDB и пусть PRIMARY KEY
будет AUTO_INCREMENT
(или начинаться с DATETIME
).
Давайте запустим несколько чисел. Если в таблице 300 миллионов строк, и каждая строка занимает 100 байтов (простое правило), то данные таблицы занимают 30 ГБ. Там будет еще несколько для индексов и других таблиц. Если вы работаете на сервере с 64 ГБ ОЗУ (вполне разумно сегодня ), то все может уместиться в ОЗУ и не требует большого количества операций ввода-вывода.
Если вместо этого у вас было только 8 ГБ ОЗУ и большая часть активности была в последних 10% таблицы, то, опять же, она будет хорошо кэширована.
(Примечание: I / O является самым большим аппаратным компонентом производительности.)
Что обычно запутывает дизайн больших таблиц - это индексация, формулировка запросов или даже общая архитектура. Но, поскольку у вас нет подробностей об этом, я пропускаю это.
Вы упомянули грубый, ручной способ разбиения таблицы. Есть что-то встроенное: PARTITIONing
. Но это , а не , вероятно, поможет вставить, обновить или выбрать, поэтому я не рекомендую это делать без дальнейшего обсуждения.
Если вы в конечном итоге очистите «старые» данные (скажем, через год), то PARTITIONing
- это хорошая идея. Я бы использовал еженедельные разделы, если таблица будет содержать данные только за 1 год. Мы можем обсудить это дальше, если вам это нужно. Но обратите внимание, что единственным преимуществом является удаление старых данных с помощью DROP PARTITION
; разметка есть.
SUBPARTITIONs
не помогают никому.