【问题标题】:given a list of record id to be retain. What is the best way to delete non-members?给定要保留的记录 ID 列表。删除非会员的最佳方法是什么?
【发布时间】:2013-01-30 07:32:03
【问题描述】:

我有一个要保留的记录的记录 ID 列表。删除不在集合中的所有记录的最佳方法是什么?我在 C# 中使用 MySQL 和 ADO.NET。我想尽量减少完成所有删除的时间。

【问题讨论】:

  • NOT IN 还不够好?
  • 保留列表大约有 100000 个 id 。我尝试使用 ADO.NET 逐一删除 100000 id 的 C# 字典。它可以在大约 10 分钟内完成。但我不确定是否有大量删除的最佳实践。我还没有尝试过 NOT IN..

标签: c# mysql ado.net


【解决方案1】:

问题是你在哪里有这些 ID?他们在另一张桌子上吗?它们在一个文件中吗?

如果你只有几个 id

DELETE FROM foo WHERE id NOT IN (1, 2, 7, 8, 10);

如果您从表中获取 ID

DELETE foo.* FROM foo LEFT JOIN foo_bar ON foo.id = foo_bar.foo_id WHERE foo_bar.foo_id IS NULL;  

如果文件中有 id(每行一个 id)

CREATE TEMPORARY TABLE foo_keep (id INT, PRIMARY KEY (id));
LOAD DATE INFILE '/tmp/myids.list' INTO foo_keep;
DELETE foo.* FROM foo LEFT JOIN foo_keep ON foo.id = foo_keep.id WHERE foo_keep.id IS NULL;

【讨论】:

  • JOIN 将是最快的方法。此外,如果您要保留的记录与整个表相比很少,也许您应该考虑相反的选择,用这些记录创建一个临时表并替换现有的表,而不是删除大量记录。跨度>
猜你喜欢
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多