Může někdo prosím vysvětlit něco o plánu vysvětlit a jak lze získat plán vysvětlit pro dotaz. Také, pokud existuje nějaký skript sql, který lze použít jako nástroj pro tento účel, bylo by to skvělé.
Můžete použít balíček DBMS_XPLAN :
SQL> explain plan for select * from dual;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 |
| 1 | TABLE ACCESS FULL | DUAL | 1 | 2 | 2 |
--------------------------------------------------------------------
Note: cpu costing is off
Příkaz EXPLAIN PLAN zobrazuje plány provádění vybrané optimalizátorem pro příkazy SELECT, UPDATE, INSERT a DELETE. Plán provádění příkazu je posloupnost operací, které databáze provádí ke spuštění příkazu.
EXPLAIN PLAN FOR ...
Nahraďte ... svým příkazem SQL. Po spuštění tohoto spuštění zobrazíte následující plán:
SELECT * FROM table(dbms_xplan.display);
Další informace naleznete v oddílech Přehled nebo Použití v Průvodci laděním výkonu Oracle 11g.
Toto je velmi běžná otázka, proto jsem se rozhodl tuto odpověď změnit na článek .
Odhadovaný plán provádění je generován optimalizátorem bez provedení dotazu SQL. Odhadovaný plán provádění můžete vygenerovat z jakéhokoli klienta SQL pomocí VYPLATIT PLÁN PRO nebo můžete použít Oracle SQL Developer pro tento úkol.
Používáte-li Oracle, připojte EXPLAIN PLAN FOR
příkaz k danému dotazu SQL, databáze uloží odhadovaný plán provádění do přidruženého PLAN_TABLE
:
EXPLAIN PLAN FOR
SELECT p.id
FROM post p
WHERE EXISTS (
SELECT 1
FROM post_comment pc
WHERE
pc.post_id = p.id AND
pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY
Chcete-li zobrazit odhadovaný plán provádění, musíte použít DBMS_XPLAN.DISPLAY
, jak je znázorněno v následujícím příkladu:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'))
Možnost formátování ALL + OUTLINE vám umožní získat více podrobností o odhadovaném plánu provádění než použití výchozí možnosti formátování.
Pokud jste nainstalovali SQL Developer, můžete snadno získat odhadovaný plán provádění pro jakýkoli dotaz SQL, aniž byste museli předepsat příkaz EXPLAIN PLAN FOR:
Skutečný plán provádění SQL generuje Optimizer při spuštění dotazu SQL. Na rozdíl od odhadovaného plánu provádění tedy musíte provést dotaz SQL, abyste získali jeho skutečný plán provádění.
Skutečný plán by se neměl výrazně lišit od odhadovaného plánu, pokud byly statistické tabulky správně shromážděny podkladovou relační databází.
Chcete-li společnosti Oracle přikázat, aby uložila skutečný plán provádění pro daný dotaz SQL, můžete použít GATHER_PLAN_STATISTICS
tip nápovědy:
SELECT /*+ GATHER_PLAN_STATISTICS */
p.id
FROM post p
WHERE EXISTS (
SELECT 1
FROM post_comment pc
WHERE
pc.post_id = p.id AND
pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY
K vizualizaci skutečného plánu provádění můžete použít DBMS_XPLAN.DISPLAY_CURSOR
:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST ALL +OUTLINE'))
Pokud chcete získat plány provádění pro všechny dotazy generované v dané relaci, můžete nastavit STATISTICS_LEVEL
konfigurace relace na VŠE:
ALTER SESSION SET STATISTICS_LEVEL='ALL'
To bude mít stejný účinek jako nastavení GATHER_PLAN_STATISTICS
tip nápovědy pro každý prováděcí dotaz. Stejně jako u GATHER_PLAN_STATISTICS
tip nápovědy, můžete použít DBMS_XPLAN.DISPLAY_CURSOR
pro zobrazení skutečného plánu provádění.
Měli byste resetovat
STATISTICS_LEVEL
nastavení do výchozího režimu, jakmile skončíte s shromažďováním prováděcích plánů, které vás zajímají. To je velmi důležité, zejména pokud používáte sdružování připojení a připojení k databázi se znovu používají.ALTER SESSION SET STATISTICS_LEVEL='TYPICAL'