Общий вопрос;общий ответ: не создайте множество «идентичных» таблиц.
Не используйте PARTITION
, за исключением очень небольшого количества запросов.Наиболее распространенной является скользящая шкала времени, где «старые» строки необходимо периодически удалять (через DROP PARTITION
).PARTITIONing
редко помогает SELECT
производительности.
(миллиард строк "огромен"; миллионы вполне жизнеспособны.)
Индексирование обязательно для любого нетривиальная таблица базы данных!
Использование country_code CHAR(2) CHARACTER SET ascii
.Это 2 байта (почти столько же, сколько 1 байт TINYINT
, и гораздо более дружественный к человеку. Конечно, это 1 МБ на миллион строк; но посмотрите на это иначе - это примерно 1% от размератаблица, которая, возможно, занимает ~ 100 байт / строку.
Что касается "проиндексированного права" - вы должны начать с SELECTs
, чтобы выяснить, какие индексы необходимы.
Вы упомянули «отчеты». Это может привести к необходимости создания и ведения сводных таблиц. (Опять же, давайте посмотрим SELECTs
.)