То, что вы пытаетесь сделать, это разбиение таблицы.
Большинство баз данных поддерживают эту функцию без необходимости ведения бухгалтерского учета вручную.
Секционирование также даст намного лучшие результаты, чем ручное перемещение частей данных в другую таблицу. Используя разделы, вы избегаете:
- Несоответствие данных. Это легко представить, потому что вы будете перемещать записи в большом количестве, а затем удалять их из исходной таблицы. Легко ошибиться и скопировать только часть данных.
- Падение производительности - перемещение данных и связанные с ними накладные расходы на транзакции, как правило, пренебрегают любой выгодой, которую вы получаете от уменьшения размера таблицы ChatCurrent.
Для очень быстрого изложения. Секционирование таблиц позволяет сообщать базе данных, что части данных хранятся и извлекаются вместе, это значительно ускоряет запросы, так как база данных знает, что ей нужно только изучить определенную часть набора данных. Пример: чат с текущего дня, последнего часа, прошлого месяца и т. Д. Вы можете дополнительно хранить каждый раздел на отдельном диске, чтобы сохранить текущую болтовню на быстром SSD-накопителе и историю на обычных медленных дисках.
Пожалуйста, обратитесь к руководству по вашей базе данных, чтобы узнать подробности о том, как оно обрабатывает разбиение.
Пример для PostgreSQL: http://www.postgresql.org/docs/current/static/ddl-partitioning.html
Разделение означает разделение логически одной большой таблицы на более мелкие физические части. Разбиение может дать несколько преимуществ:
Производительность запросов может быть значительно улучшена в определенных ситуациях, особенно когда большинство часто используемых строк таблицы находятся в одном разделе или небольшом количестве разделов. Разделение заменяет ведущие столбцы индексов, уменьшая размер индекса и повышая вероятность того, что интенсивно используемые части индексов помещаются в памяти.
Когда запросы или обновления обращаются к большому проценту одного раздела, производительность можно улучшить, воспользовавшись преимуществом последовательного сканирования этого раздела вместо использования индекса и чтения с произвольным доступом, разбросанного по всей таблице.
Массовую загрузку и удаление можно выполнить путем добавления или удаления разделов, если это требование запланировано в проекте разделения. ALTER TABLE NO INHERIT и DROP TABLE работают намного быстрее, чем массовая операция. Эти команды также полностью исключают издержки VACUUM, вызванные массовым удалением.
Редко используемые данные можно переносить на более дешевые и медленные носители.