【发布时间】:2014-04-25 07:32:14
【问题描述】:
INSERT INTO table3
SELECT
tbl1.pk_1, tbl1.pk_2, tbl2.pk_3, tbl1.pk4
FROM
table1 tbl1, table2 tbl2
WHERE
tbl1.pk_1 = 'root' and
NOT EXISTS
(SELECT 1 FROM table3 tbl3
WHERE tbl3.pk_1 = tbl1.pk_1 and tbl3.pk_2 = tbl1.pk_2 and tbl3.pk_3 = tbl2.pk_3 and tbl3.pk_4 = tbl1.pk_4)
;
我的 SQL 语句如下所示。 table1 和 table3 有超过 1000000 行,table2 有 100 行。这个 SQL 语句很慢。完成需要100多秒。有什么办法可以改善吗?
【问题讨论】:
-
最好使用 MERGE 语句。
-
你能说明你在这三个表上都有哪些索引和约束吗?
-
另外,
tbl1和tbl2之间的交叉连接是故意的吗?我觉得缺少连接谓词... -
感谢您的回复。我需要将数据插入table3。这些数据是通过连接 table1 和 table2 选择的。 table3中已经存在一些join结果,所以我需要使用NOT EXISTS来移除这些结果。
-
我认为
table3或tbl3是一个错字。为了清楚起见,可能应该更正一下。
标签: sql oracle not-exists sql-tuning