gpt4 book ai didi

sql - 在 Oracle 11g 中执行批量删除操作

转载 作者:行者123 更新时间:2023-12-04 02:45:15 25 4
gpt4 key购买 nike

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

最佳答案

我只能想到两种方法来加快速度。

  1. 如果您定期这样做,您应该考虑按月对表进行分区。然后,您只需删除要删除的月份的分区即可。这基本上和丢一张 table 一样快。如果我没记错的话,分区需要企业许可证
  2. 使用您要保留 的数据创建一个新表(使用create table new_table as select ...),删除旧表并重命名临时表。这会快得多,但缺点是您需要在新表上重新创建所有索引和(主、外键)约束。

关于sql - 在 Oracle 11g 中执行批量删除操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18948988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com