Sql server 2008 WHERE in查询中可能的最大值
我有一个超过3000000个条目的表,我需要删除其中500000个具有给定ID的条目。 我的想法是创建如下查询:Sql server 2008 WHERE in查询中可能的最大值,sql-server-2008,sql-delete,where-in,Sql Server 2008,Sql Delete,Where In,我有一个超过3000000个条目的表,我需要删除其中500000个具有给定ID的条目。 我的想法是创建如下查询: DELETE FROM TableName WHERE ID IN (id1, id2, ...........) 我用一个简单的C代码生成。 问题是: 我可以在ID数组中设置多少个值有限制吗 如果有人有更好的方法更有效地实现这一目标,我愿意接受各种想法 如果无法通过任何比较确定您的ID(如中的ID
DELETE FROM TableName WHERE ID IN (id1, id2, ...........)
我用一个简单的C代码生成。
问题是:
我可以在ID数组中设置多少个值有限制吗
如果有人有更好的方法更有效地实现这一目标,我愿意接受各种想法 如果无法通过任何比较确定您的ID(如
中的ID<1000000
),您可以
INSERT
将它们插入到包含多个INSERT的临时表中,然后将此临时表加入您的临时表
最后,我的解决方案效果还不错: 1.对ID进行排序(以保存服务器分页) 2.使用C#代码查询创建,其中包含500个ID。 3.一个接一个地发送查询 我假设,当我处理具有1000个以上ID的查询时,sql server处理查询的时间会减慢我的速度(在sql server中运行的所有查询都在处理和优化之后)
我希望这有助于某人嗯。。。它没有足够的内存来处理该查询您的C#代码如何确定ID列表?如果它可以在T-SQL中指定为where/having子句和/或子查询的组合,则可能是更好的方法。C代码的可能副本是从数据源(XML文件)提取id,所有有条件的人。如果你只是删除所有小于1000000的ID,我不明白你为什么要引入临时表。所以我认为它不应该是ID列表,而是ID范围列表。@Martin:我说的是当ID不能通过简单的比较来确定时。。。“不行!”罗伯特——你也是!我错了!我真的看不出添加临时表将如何改善所需的时间。。。。正在创建临时表/连接现有表/然后删除。。。。。虽然我一直有一个要删除的ID列表(主键)