![](/img/trans.png)
[英]How to execute more than 1 million insert queries in Oracle SQL Developer?
[英]How does Oracle execute queries
假设我有这样的查询:
SELECT *
FROM
(SELECT x,y,z
FROM Foo
WHERE x NOT IN (sq1)
UNION SELECT x,y,z
FROM Foo2
WHERE x NOT IN (sq2))
WHERE y IN ('a','b')
AND z IN ('xa','xb','xc')
然后我将其转换为:
SELECT x,y,z
FROM Foo
WHERE x NOT IN (sq1) AND y IN ('a','b') AND z IN ('xa','xb','xc')
UNION
SELECT x,y,z
FROM Foo2
WHERE x NOT IN (sq2) AND y IN ('a','b') AND z IN ('xa','xb','xc')
我这样做是为了避免选择全部然后进行过滤,但是我不确定Oracle将如何处理它,通常在y IN ('a','b')
返回false时,Oracle不应该执行sq1
。
那么,有人知道Oracle将如何执行此操作吗?
Oracle将根据执行计划执行它。 SQL优化器 (作为执行的初始阶段之一)根据以下条件来制定执行计划:
要了解Oracle将如何执行您的特定查询,请运行:
explain plan for <my-query>
然后使用以下方法查看计划:
select plan_table_output
from table(dbms_xplan.display('plan_table',null,'typical'));
这将为您提供所需的详细信息。 当然,您需要学习如何阅读计划。 这并不困难,但需要花费几周的学习时间。 提示 :计划采用树的形式,其中首先执行叶节点,直到最后执行根节点。
请记住,执行计划会根据表中的实际数据及时更改,因为Oracle可能会发现一段时间后以其他方式进行操作会更便宜(有时可能会出错)。
如果表从1000行增加到100万行,那么今天的计划可能与明天看到的计划不同。 只要您更新统计信息,它就会适应现实。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.