(Я согласен с ответом Билла; я подойду к Вопросу по-другому.)
Когда пора разбивать мои таблицы?
Возможно, никогда.
может ли он улучшить свою производительность?
Скорее всего, немного снизится производительность.
У меня есть таблицасодержит 1,5 миллиона строк
Недостаточно большого размера, чтобы беспокоиться о разбиении.
Запросы в настоящее время занимают очень много времени
Обычно , что связано с отсутствием хорошего индекса, возможно, «составного». Во-вторых - это формулировка запроса.Пожалуйста, покажите нам медленный запрос вместе с SHOW CREATE TABLE
.
данными за 2 года, и он растет каждый день
Будете ли вы в конечном итоге очищать "старые" данные?Если это так, PARTITION BY RANGE(TO_DAYS(..))
- отличная идея.Тем не менее, это помогает только во время чистки.Это потому, что DROP PARTITION
на лот быстрее, чем DELETE...
.
у нас, вероятно, сейчас меньше памяти.
Если вы в основномесли посмотреть на «последние» данные, то размер памяти (ср innodb_buffer_pool_size
) может не имеет значения.Это связано с кешированием.Тем не менее, похоже, что вы выполняете сканирование таблицы, возможно, излишне.
Придется ли мне вносить изменения в мой текущий INSERT или SELECT
Нет.Но вам , вероятно , нужно изменить столбцы в PRIMARY KEY
и вторичном ключе (ключах).
Требуется ли много времени для выполнения раздела?
Медленно - да, потому что он скопирует всю таблицу.Примечание: это означает дополнительное дисковое пространство, и разделенная таблица займет больше диска.
что-то произойдет на полпути, и я потеряю данные.
Не беспокойтесь,Создается новая таблица, затем очень быстро RENAME TABLE
заменяет ее на место.
Должен ли я делить ее на годы или месяцы?
Правило большого пальца:цель около 50 разделов.С "2 годами и растущими" вероятным выбором будет "ежемесячно".
мы обычно смотрим на цифры в течение месяца, но иногда мы берем недели или годы
Пахнет как типичный набор данных «Хранилище данных»?Постройте и постепенно увеличивайте «Сводную таблицу» с ежедневной статистикой.С помощью этой таблицы вы можете быстро получить еженедельную / ежемесячную / годовую статистику - возможно, в 10 раз быстрее.То же самое для любого диапазона дат.Это также значительно помогает при «нехватке памяти».
И нужно ли также разбивать столбцы?(У нас есть некоторые столбцы, которые мы используем редко или никогда, но мы могли бы использовать их позже)
Вы не должны использовать никогда SELECT *
;вместо этого укажите столбцы, которые вам действительно нужны.«Вертикальное разделение» - это термин для вашего предложения.Это иногда практично.Но нам нужно увидеть SHOW CREATE TABLE
с реалистичными именами столбцов для дальнейшего обсуждения.
Подробнее о разбиении: http://mysql.rjweb.org/doc.php/partitionmaint
Подробнее о сводных таблицах: http://mysql.rjweb.org/doc.php/summarytables