gpt4 book ai didi

sql - 如何优化此SQL删除语句

转载 作者:行者123 更新时间:2023-12-02 09:47:04 24 4
gpt4 key购买 nike

我有3个表,第一个表table1具有id列作为主键,第二个表(table2)具有table1_id列,该列称为table1.id的外键,第三个表(table3)具有table2 ,即table1_id列,它是table1.id的外键。

我必须从table1中删除table1.id不在table2.table1_id中并且不在table3.table1_id中的所有行

现在我正在使用此查询:

DELETE FROM table1
WHERE table1.id IN (SELECT table1.id
FROM (table2
RIGHT OUTER JOIN table1
ON table2.table1_id = table1.id)
LEFT OUTER JOIN table3
ON table3.table1_id = table1.id
WHERE table2.table1_id IS NULL
AND table3.table1_id IS NULL);

但是它很慢,需要很多时间,有一些更好的方法来执行这个delete语句吗?

如果这可以帮助我可以假设table2具有比table3更多的数据。

我正在使用的数据库是Apache Derby。

谢谢您的帮助。

最佳答案

假设您已经了解了明显的内容(为table1.idtable2.table1_idtable3.table1_id创建的索引),则无需执行完全外部联接即可仅测试键是否在另一个表中,因此可以在您的表中使用子查询和exists()not exists()案件。

而且,由于您仅测试存在性,因此可以使用以下模式:

where not exists ( select top 1 1 from... where... )

关于sql - 如何优化此SQL删除语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7517049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com