【发布时间】:2010-12-17 06:16:15
【问题描述】:
所以基本上这就是我想要做的:我有一个帐户表,我有一个 acct_id 列表:(3、24、515、6326、17),假设我表中有大约 100,000 个帐户,最多的是什么删除除给定列表中具有 account_id 的行之外的所有其他行的有效方法?
我想出了类似的东西:
delete from account where acct_id is not in (3, 24, 515, 6326, 17);
我听说这个查询很慢,因为它是递归的什么的。考虑一下我拥有的行数,那会非常慢。有什么更好的方法来做到这一点?
【问题讨论】:
-
你有表关系——从其他表到这个表的外键吗?您(计划)在该表上有多少索引?这些可以极大地改变答案:即删除表可能不是选项,或者简单的 DELETE 性能将与棘手的方式相同。知道你在优化什么:它可能没有被破坏。
-
@fei 我知道这个问题很老了,但我可以知道你为什么或在哪里听说你的查询很慢吗?
标签: mysql database delete-row large-data-volumes