Раздел таблицы MySQL по месяцам

У меня есть огромная таблица, которая хранит много отслеживаемых событий, таких как щелчок пользователя.

таблица уже в 10-х из миллионов, и его становится все больше с каждым днем. Запросы начинают замедляться, когда я пытаюсь получить события с большого таймфрейма, и после прочтения довольно много по этому вопросу я понимаю, что разбиение таблицы может повысить производительность.

то, что я хочу сделать, это разбить таблицу на месяц.

У меня только найдены руководства, которые показывают, как разбивать вручную каждый месяц, есть ли способ просто сказать MySQL разбивать по месяцам, и он сделает это автоматически?

Если нет, то какая команда для этого вручную, учитывая, что мой разделенный столбцом столбец является datetime?

2 ответов


как объяснено руководством:http://dev.mysql.com/doc/refman/5.6/en/partitioning-overview.html

это легко возможно путем хэш-секционирования вывода месяца.

CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
    ENGINE=INNODB
    PARTITION BY HASH( MONTH(tr_date) )
    PARTITIONS 6;

обратите внимание, что это только разделы по месяцам, а не по годам, также есть только 6 разделов (так что 6 monhts) в этом примере.

и для секционирования существующей таблицы (руководство: https://dev.mysql.com/doc/refman/5.7/en/alter-table-partition-operations.html):

ALTER TABLE ti
    PARTITION BY HASH( MONTH(tr_date) )
    PARTITIONS 6;

запрос может быть выполнен как из всей таблицы:

SELECT * from ti;

или из определенных разделов:

SELECT * from ti PARTITION (HASH(MONTH(some_date)));

используйте TokuDb который имеет время доступа независимо от размера таблицы.