按月份MySQL表格分区

我有一个巨大的表格,用于存储许多跟踪事件,例如用户点击。

这张桌子已经有数百万人了,而且每天都在增长。 当我尝试从大时间范围获取事件时,查询开始变慢,并且在对该主题进行了相当多的阅读之后,我明白分区表可能会提升性能。

我想要做的是每月分区表。

我只发现了一些指南,说明如何每个月手动进行分区,是否有办法告诉MySQL按月进行分区,并且会自动进行分区?

如果不是,考虑到按列分区是日期时间,手动执行该操作的命令是什么?


正如手册所解释的: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。

链接地址: http://www.djcxy.com/p/75031.html

上一篇: MySQL table partition by month

下一篇: Animate a view containing subviews with autolayout