2010-04-11 99 views
61

如果我有一个Ids列表(1,4,6,7)和一个数据库表,我想删除列表中的所有记录,在这个列表中最快的方式是做什么?删除列表中的ID

回答

105

你的问题几乎法术这个SQL:

DELETE FROM table WHERE id IN (1, 4, 6, 7) 
+0

有没有人对此进行了基准测试vs一对一删除? – jayarjo 2010-06-08 10:59:05

+0

@jayarjo:任何差异都可能是微不足道的,我不认为有任何理由一个接一个地删除会更有效。 – 2010-06-08 16:50:14

+0

这只是性能可能会带来便利的地方。例如,我已经有了一个一个一个地完成它的功能。但是如果有机会提升性能,我可以写一些额外的代码,否则可能不值得。 – jayarjo 2010-06-09 10:55:56

10
delete from t 
where id in (1, 4, 6, 7) 
-5

正确的答案是这样的速度取决于您所使用的特定实现/发动机的特点,你应该提防任何假装能够对这个问题给出明确答案的庸医。

如果你的系统的优化器很差,它不会从'WHERE id IN(...)'中找到优化机会,那么它将执行表扫描,这可能比给出4单独的删除命令。

+1

垃圾。请引用一个数据库引擎,其中4个单独的删除会更快。 – Blorgbeard 2010-04-11 09:47:07

+1

如果系统中的优化器很差...您应该切换到另一个数据库引擎 – 2010-04-11 10:12:55