[英]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.