Я наткнулся на этот вопрос, когда искал что-то еще, и хотел указать на механизм хранения MERGE (http://dev.mysql.com/doc/refman/5.7/en/merge-storage-engine.html).
Хранилище MERGE представляет собой более или менее простой указатель на несколько таблиц и может бытьпеределывать за считанные секунды. Для циклических журналов это может быть очень мощно! Вот что я бы сделал:
Создайте одну таблицу в день, используйте LOAD DATA в качестве OP, упомянутого как OP, чтобы заполнить ее. Как только это будет сделано, отбросьтетаблицу MERGE и воссоздайте ее, включая эту новую таблицу, пропуская самую старую. После этого я мог бы удалить / заархивировать старую таблицу. Это позволило бы мне быстро запросить конкретный день или все, как исходные таблицы, так и таблицы MERGE.допустимо.
CREATE TABLE logs_day_46 LIKE logs_day_45 ENGINE=MyISAM;
DROP TABLE IF EXISTS logs;
CREATE TABLE logs LIKE logs_day_46 ENGINE=MERGE UNION=(logs_day_2,[...],logs_day_46);
DROP TABLE logs_day_1;
Обратите внимание, что таблица MERGE не совпадает с таблицей PARTIONNED и предлагает некоторые преимущества и неудобства. Но помните, что если вы пытаетесь агрегировать из всех таблиц, это будет медленнее, чем есливсе данные были только в одной таблице (то же самое верно для разделов, так как они в основном разные таблицы под капотом).Вы будете выполнять запросы в основном в определенные дни, вам нужно будет выбрать таблицу самостоятельно, но если разбиения будут выполнены по значениям дня, MySQL автоматически получит правильные таблицы, которые могут появиться быстрее и проще для написания.