我想按日期范围对具有1M +行的表进行分区。通常如何做到这一点而又不需要太多的停机时间或冒着丢失数据的风险?这是我正在考虑的策略,但可以提出一些建议:
现有表是主表,子表继承自该表。随着时间的流逝,数据会从主数据移到子数据,但是一段时间后,某些数据将在主表中,而某些数据将在子表中。
创建一个新的主表和子表。在子表的现有表中创建数据副本(因此数据将驻留在两个位置)。子表拥有最新数据后,请更改所有插入以指向新的主表并删除现有表。
1
这是我的想法:如果表具有datetime列->创建新的master +新的child->将新数据插入NEW + OLD(例如:datetime = 2015-07-06 00:00:00)->从OLD复制到NEW base on time列(其中:datetime <2015-07-06 00:00:00)->重命名表->将插入更改为NEW否则->为在主数据库上插入/更新(插入/更新新数据-创建“分区触发器” >移至子级,因此会将新数据插入到子级中)->更新master,触发器会将数据移至子级。
—
Luan Huynh
@Innnh,因此建议您选择第二个选项,但是一旦复制完数据,请删除旧表并重命名新表,使其具有与旧表相同的名称。那正确吗?
—
伊万·阿普比
将新表重命名为旧表,但是您应该保留旧表,直到完全可以使用新的流分区表为止。
—
Luan Huynh
对于仅有的几百万行,我认为实际上没有必要进行分区。为什么您认为需要它?您要解决什么问题?
—
a_horse_with_no_name
@EvanAppleby
—
dezso 2015年
DELETE FROM ONLY master_table
是解决方案。