【发布时间】:2015-11-28 20:32:38
【问题描述】:
我有一个包含超过 500 万条记录的表
我需要删除 300000 条记录,但我不能使用表的复合键。
必须使用列Price_VERSION_SEQ 进行删除。我正在考虑仅在内部查询中使用获取前 50000 行来删除块中的数据。但我不确定在主查询的 Where 子句中使用什么。
请帮忙。应该用什么来代替****。
DELETE FROM Price_TBL where **** in
(Select * from Price_TBL where Price_VERSION_SEQ=1 fetch first 50000 rows only);
表格中的列是:
Price_GRP_VAR_COD
Price_VERSION_SEQ
Price_MP_OPER_COD
Price_FROM_MPM_RT
Price_FROM_MPM_RT1
复合键:
Price_GRP_VAR_COD
Price_VERSION_SEQ
Price_MP_OPER_COD
【问题讨论】:
-
我不相信分割删除是解决问题的最佳方法,但也许你有充分的理由这样做。您是否尝试一次性删除所有内容?如果由于某些内存设置而失败,那么所需的重新配置是否不可行?只是一些思考的食物。
-
我收到超时错误,因为分配给我的资源是有限的。而且不能增加。所以留给我的唯一选择就是划分查询并避免超时。
-
Price_VERSION_SEQ 是否已编入索引?如果是,则使用该列,否则选择另一个索引列。顺便提一句。您使用的是 MySQL 还是 SQL Server? (它们中的任何一个都支持 FETCH FIRST 语法吗?!?)不涉及取消标记产品。
标签: mysql sql sql-server sql-delete