我有一个表MyTable
,其中包含多个带有日期的int列和一个包含日期的列。日期列的索引创建如下
CREATE INDEX some_index_name ON MyTable(my_date_column)
因为通常会在用户指定的日期范围之间查询表的内容。该表没有指向它的外键,也没有除主键之外的任何其他索引,主键是由序列/触发器填充的自动递增索引。
现在,我遇到的问题是这个表上的数据经常被替换一段时间,因为它已经过时了。因此,更新方式是删除给定时间段内的所有条目并插入新条目。删除是使用
执行的DELETE FROM MyTable
WHERE my_date_column >= initialDate
AND my_date_column < endDate
但是,由于删除的行数很大(从500万行到1200万行),程序在删除过程中几乎都会阻塞。
我可以禁用某些东西来加快操作速度吗?或者可以在索引中指定一个选项以使其更快?我读过一些关于重做空间的事情,但是我不知道在操作过程中如何禁用它。
编辑:该过程每天运行并删除最近5天的数据,然后它会带来这5天的数据(可能已在外部源中更改)并重新插入数据。
与表中的全部数据(<1%)相比,删除的数据量很小。因此,将要保留的数据复制到另一个表中并删除 - 重新创建表可能不是最佳解决方案。
答案 0 :(得分:4)
我只能想到两种方法来加速这个。
create table new_table as select ...
),删除旧表并重命名interims表。这将更快,但缺点是您需要在新表上重新创建所有索引和(主键,外键)约束。