我有一个表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%)。因此,将我想要保留的数据复制到另一个表中并删除重新创建表可能不是最好的解决方案。