この質問に似ています。
PostgreSQL の EXPLAIN ANALYZE と同様に、Oracle (10g) で詳細なクエリ プランと実際の実行を取得したいと考えています。同等のものはありますか?
この質問に似ています。
PostgreSQL の EXPLAIN ANALYZE と同様に、Oracle (10g) で詳細なクエリ プランと実際の実行を取得したいと考えています。同等のものはありますか?
最も簡単な方法は、sql*plus の autotrace です。
SQL> set autotrace on exp
SQL> select count(*) from users ;
COUNT(*)
----------
137553
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=66 Card=1)
1 0 SORT (AGGREGATE)
2 1 INDEX (FAST FULL SCAN) OF 'SYS_C0062362' (INDEX (UNIQUE)
) (Cost=66 Card=137553)
あるいは、オラクルにはexplain plan
ステートメントがあり、それを実行してからさまざまなプランテーブルをクエリできます。最も簡単な方法は、DBMS_XPLAN
パッケージを使用することです:
SQL> explain plan for select count(*) from users ;
Explained.
SQL> SELECT * FROM table(DBMS_XPLAN.DISPLAY);
--------------------------------------------------------------
| Id | Operation | Name | Rows | Cost |
--------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 66 |
| 1 | SORT AGGREGATE | | 1 | |
| 2 | INDEX FAST FULL SCAN| SYS_C0062362 | 137K| 66 |
--------------------------------------------------------------
古い学校の場合は、プラン テーブルを自分でクエリできます。
SQL> explain plan set statement_id = 'my_statement' for select count(*) from users;
Explained.
SQL> column "query plan" format a50
SQL> column object_name format a25
SQL> select lpad(' ',2*(level-1))||operation||' '||options "query plan", object_name
from plan_table
start with id=0 and statement_id = '&statement_id'
connect by prior id=parent_id
and prior statement_id=statement_id
Enter value for statement_id: my_statement
old 3: start with id=0 and statement_id = '&statement_id'
new 3: start with id=0 and statement_id = 'my_statement'
SELECT STATEMENT
SORT AGGREGATE
INDEX FAST FULL SCAN SYS_C0062362
utlxpls.sql
Oracleには、そのクエリのより完全なバージョンを含むユーティリティ ファイルが同梱されていました。で確認してください$ORACLE_HOME/rdbms/admin
。
これらの方法のいずれについても、DBA は適切なプラン テーブルをすでに設定している必要があります。