I have a table with few million records.
___________________________________________________________
| 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|
-----------------------------------------------------------
I have to delete records which are older than month with some_indicator=no.
Again I have to delete records older than year with some_indicator=yes.This job will run everyday.
Can I use db2 partitioning feature for above requirement?.
How can I partition table using last_updated_date column and above two some_indicator values?
one partition should contain records falling under monthly delete criterion whereas other should contain yearly delete criterion records.
Are there any performance issues associated with table partitioning if this table is being frequently read,upserted?
Any other best practices for above requirement will surely help.
I haven’t done much with partitioning (I’ve mostly worked with DB2 on the iSeries), but from what I understand, you don’t generally want to be shuffling things between partitions (ie – making the partition ‘1 month ago’). I’m not even sure if it’s even possible. If it was, you’d have to scan some (potentially large) portion of your table every day, just to move it (select, insert, delete, in a transaction).
Besides which, partitioning is a DB Admin problem, and it sounds like you just have a DB User problem – namely, deleting ‘old’ records. I’d just do this in a couple of statements:
and
…. and you can pretty much ignore using a transaction, as you want the rows gone.
(as a side note, using ‘yes’ and ‘no’ for indicators is terrible. If you’re not on a version that has a logical (boolean) type, store character ‘0’ (false) and ‘1’ (true))