我有一个巨大的表存储许多跟踪事件,例如用户点击.
该表已经达到数百万的数量,并且每天都在增长.当我尝试从大时间帧中获取事件时,查询开始变慢,并且在阅读了相当多的主题后,我明白分区表可能会提高性能.
我想要做的是每月对表进行分区.
我只找到了指导如何每个月手动分区的指南,有没有办法告诉MySQL按月分区,它会自动执行?
如果没有,考虑到我的分区列是手动执行它的命令是一个日期时间?
Wol*_*lph 11
如手册所述: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;
Run Code Online (Sandbox Code Playgroud)
请注意,这仅按月而不是按年分区,在此示例中也只有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;
Run Code Online (Sandbox Code Playgroud)
可以从整个表中查询:
SELECT * from ti;
Run Code Online (Sandbox Code Playgroud)
或者从特定分区:
SELECT * from ti PARTITION (HASH(MONTH(some_date)));
Run Code Online (Sandbox Code Playgroud)