提高Sql Delete的性能

ami*_*mit 6 sql database sybase query-optimization database-optimization

我们有一个查询,要根据id字段(主键)从表中删除一些行.这是一个非常简单的查询:

delete all from OUR_TABLE where ID in (123, 345, ...)
Run Code Online (Sandbox Code Playgroud)

问题是没有.id可能很大(例如70k),因此查询需要很长时间.有没有办法优化这个?(我们正在使用sybase - 如果这很重要).

HLG*_*GEM 4

考虑批量运行它。一次运行 1000 条记录的循环可能比执行所有操作的一个查询快得多,而且不会长时间将表锁定给其他用户。

如果您有级联删除(并且许多外键表受到影响)或涉及触发器,您可能需要以更小的批次运行。您必须进行试验才能确定哪个数字最适合您的情况。我有一些表,我必须批量删除 100 条记录,而另一些表则需要 50000 条记录(在这种情况下很幸运,因为我删除了 100 万条记录)。

但在任何情况下,我都会将我打算删除的键值放入临时表中并从那里删除。