DB2表分区和根据条件删除旧记录

DB2表分区和根据条件删除旧记录,db2,delete-row,Db2,Delete Row,我有一张有几百万张唱片的桌子 ___________________________________________________________ | col1 | col2 | col3 | some_indicator | last_updated_date | ----------------------------------------------------------- | | | | yes | 2009-06-09.12.2

我有一张有几百万张唱片的桌子

___________________________________________________________
| col1 | col2 | col3 | some_indicator | last_updated_date |
-----------------------------------------------------------
|      |      |      |        yes     | 2009-06-09.12.2345|        
-----------------------------------------------------------
|      |      |      |        yes     | 2009-07-09.11.6145|
-----------------------------------------------------------
|      |      |      |        no      | 2009-06-09.12.2345|
-----------------------------------------------------------
我必须删除超过一个月的记录,其中某些指标=否。 同样,我必须删除一些年以上的记录,其中一些_indicator=yes。此作业将每天运行

我可以为上述要求使用db2分区特性吗?。 如何使用last_updated_date列和两个以上的指标值对表进行分区? 一个分区应包含符合月度删除标准的记录,而另一个分区应包含年度删除标准记录。 如果该表经常被读取、升级,是否存在与表分区相关的性能问题?
对于上述要求,任何其他最佳实践都肯定会有所帮助。

我在分区方面做得不多,我主要是在iSeries上使用DB2,但据我所知,您通常不希望在分区之间进行切换,即“一个月前”将分区设置为一个分区。我甚至不确定这是否可能。如果是这样的话,您就必须每天扫描表中可能很大一部分,以便在事务中选择、插入、删除并移动它

除此之外,分区是一个DB管理问题,听起来您只是有一个DB用户问题——即删除“旧”记录。我只想用几句话来说明这一点:

DELETE FROM myTable 
WHERE some_indicator = 'no'
AND last_updated_date < TIMESTAMP(CURRENT_DATE - 1 MONTH, TIME('00:00:00'))

。。。。您几乎可以忽略使用事务,因为您希望行消失

作为旁注,对指标使用“是”和“否”是很糟糕的。如果您使用的版本不是逻辑布尔类型,请将字符“0”存储为false,将字符“1”存储为true

DELETE FROM myTable
WHERE some_indicator = 'yes'
AND last_updated_date < TIMESTAMP(CURRENT_DATE - 1 YEAR, TIME('00:00:00'))