只是想知道哪个更快:
DELETE FROM table_name WHERE X='1'
DELETE FROM table_name WHERE X='2'
DELETE FROM table_name WHERE X='3'
或
DELETE FROM table_name WHERE X IN ('1', '2', '3')
任何想法,提示或参考资料在哪里阅读?
谢谢大家!
答案 0 :(得分:19)
由于以下几个原因,单次删除会更快:
答案 1 :(得分:3)
单个删除速度更快,只有一个计划可以创建和执行。
答案 2 :(得分:3)
由于已经陈述的原因,单一陈述更快。
在给出的例子中
DELETE FROM table_name WHERE X BETWEEN 1 AND 3
会更快,特别是如果你在X上有一个聚集索引。
答案 3 :(得分:1)
使用索引和数据在数据库中对其进行配置。我倾向于同意使用单个语句,但是,我可以想到一些快速实例,3个语句会快得多。如果真的很重要,请进行描述。
答案 4 :(得分:1)
由于kogus提到的原因,单个删除通常更快。
但是......请记住,如果你必须消灭200万行表中的50%并且对表有很多活动,请小批量删除或选择新表并交换该表可能是更好的方法。
答案 5 :(得分:1)
单一陈述:
DELETE FROM table_name WHERE X IN ('1', '2', '3')
......会更快。我不确定您使用的是哪个数据库,但我建议您查看execution plan个查询。如果您使用的是MySQL,则可以使用EXPLAIN命令,如:
EXPLAIN DELETE FROM table_name WHERE X IN ('1', '2', '3')
正如您在评论中写的那样,如果您希望动态填充IN()子句,您可以使用子查询,如:
DELETE FROM table_name WHERE x IN (SELECT id FROM table_name WHERE Y = Z)
(或其他)
答案 6 :(得分:0)
我认为您可能需要考虑第三种选择。我认为它可能比你的第一个例子更好,但不如你的第二个例子好。
如果您的数据库支持使用预备语句,那么您可以对该语句进行准备。
DELETE FROM table_name WHERE X='?'
然后简单地用值1,2和3调用它。
一般来说,我的经验是,当您使用基于集合的操作时,如第二个示例,您将获得最佳性能。