我得把这些孤立的记录删除 Base Table
.
基表
id | raw_data | unit
1 | 20 | kg
2 | 30 | km
3 | 10 | s
4 | 10 | s
5 | 20 | km/s
6 | 70 | mpg
表a
id | field_1 | field_2
1 | 1 | 2
表b
id | field_1 | field_2
1 | 3 | 4
这个 field_1
以及 field_2
两者都有 Table A
以及 Table B
是指 Base Table
的主键。
从年起 Base Table
id为5和6的记录没有从任何表中引用,这两个是孤立记录,我想将其从数据库中删除。
delete from base_table base
where not exists (select from table_a a where base.id = a.field_1
or base.id = a.field_2 )
and not exists (select from table_b b where base.id = b.field_1
or base.id = b.field_2)
问题是如果我的 Base Table
有很多记录(250万)。我可能有10张这样的table Table A
或者 Table B
有数据表明 Base Table
.
如何清理上的孤立记录 Base Table
?
3条答案
按热度按时间42fyovps1#
也许只是使用
UNION
获取的所有IDfield_1
以及field_2
的table_a
以及table_b
,并使用NOT IN
过滤。vwhgwdsa2#
您当前的查询在逻辑上是正确的,并且可能已经是最佳选择。您可以考虑为a和b表编制索引:
这可能会加快当前delete查询中的exists查找速度,可能会使它们大大加快。
f2uvfpb93#
or
会毁了你的表演。我建议将代码编写为:然后,需要以下索引:
table_a(field_1)
table_a(field_2)
table_b(field_1)table_b(field_2)
您可以使用select
查询。