【发布时间】:2020-10-15 22:51:20
【问题描述】:
我有一个包含 50 万条记录的“主”表,其中包含一个主键 ID (MovieId),其他几个表用作外键(多对多表)。
其中一些多对多表有数百万条记录(最多 2000 万条)。
我想从主表中不存在外键的多对多表中删除所有记录。这将极大地减小它们的大小(每条“仅”减少一百万或两百万条记录)。
但是实现这一点的 SQL 似乎非常耗时 - 基本上循环超过 2000 万条记录,每次都在主表中查看多达 50 万条记录,以查看 2000 万条中的外键是否50万条主表记录中存在多对多表记录作为主键。
我可以想象这需要很长时间。有没有(相对)快速的方法来做到这一点?
我的第一个想法是这样的:
DELETE FROM ACTORS_MOVIES_M2M
WHERE MovieiD NOT EXISTS (SELECT MovieiD FROM MOVIES_MAIN)
...再说一次,我认为这需要...一段时间。
【问题讨论】:
-
该代码无法解析。
标签: sql sql-server foreign-keys query-optimization sql-delete