21

私は今データベースインデックスについて学んでいて、それらを使用する効率を理解しようとしています。

  • 特定のクエリがインデックスを使用しているかどうかを確認したいのですが。
  • インデックスを使用してクエリを実行する場合と、インデックスを使用せずにクエリを実行する場合の違いを実際に確認したい(したがって、クエリの実行プランを確認したい)。

私はsql+を使用しています。

実行プランを確認するにはどうすればよいですか。また、インデックスが使用されたかどうかを示す情報はどこにありますか。

4

5 に答える 5

28

このコードを使用して、最初に説明してから計画を確認してみてください。

計画を説明する:

explain plan 
for 
select * from table_name where ...;

計画を参照してください:

select * from table(dbms_xplan.display);

編集:角かっこを削除しました

于 2012-08-03T17:36:17.507 に答える
5

推定SQL実行プラン

推定実行プランは、SQLクエリを実行せずにオプティマイザーによって生成されます。EXPLAIN PLAN FORを使用して任意のSQLクライアントから推定実行計画を生成するか、このタスクにOracleSQLDeveloperを使用できます。

の説明計画

Oracleを使用している場合EXPLAIN PLAN FOR、特定のSQLクエリの前にコマンドを追加すると、データベースは推定実行プランを関連する次の場所に格納します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

DBMS_XPLAN.DISPLAY推定実行プランを表示するには、次の例に示すように、を使用する必要があります。

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'))

ALL + OUTLINE書式設定オプションを使用すると、デフォルトの書式設定オプションを使用するよりも、推定実行プランに関する詳細を取得できます。

Oracle SQL Developer

SQL Developerをインストールしている場合は、EXPLAIN PLAN FORコマンドを追加しなくても、SQLクエリの推定実行プランを簡単に取得できます。

ここに画像の説明を入力してください

##実際のSQL実行プラン

実際のSQL実行プランは、SQLクエリの実行時にオプティマイザーによって生成されます。したがって、推定実行プランとは異なり、実際の実行プランを取得するには、SQLクエリを実行する必要があります。

テーブルの統計が基盤となるリレーショナルデータベースによって適切に収集されている限り、実際の計画は推定された計画と大きく異なることはありません。

GATHER_PLAN_STATISTICSクエリヒント

特定のSQLクエリの実際の実行プランを格納するようにOracleに指示するには、GATHER_PLAN_STATISTICSクエリヒントを使用できます。

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

実際の実行計画を視覚化するには、次を使用できますDBMS_XPLAN.DISPLAY_CURSOR

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST ALL +OUTLINE'))

すべてのクエリに対してSTATISTICSを有効にする

特定のセッション内で生成されたすべてのクエリの実行プランを取得する場合は、STATISTICS_LEVELセッション構成をALLに設定できます。

ALTER SESSION SET STATISTICS_LEVEL='ALL'

GATHER_PLAN_STATISTICSこれは、すべての実行クエリにクエリヒントを設定するのと同じ効果があります。したがって、GATHER_PLAN_STATISTICSクエリヒントの場合と同様に、を使用DBMS_XPLAN.DISPLAY_CURSORして実際の実行プランを表示できます。

STATISTICS_LEVEL関心のある実行プランの収集が完了したら、設定をデフォルトモードにリセットする必要があります。これは、特に接続プールを使用していて、データベース接続が再利用される場合に非常に重要です。

ALTER SESSION SET STATISTICS_LEVEL='TYPICAL'
于 2019-09-04T07:24:45.867 に答える
3

ExplainPlanを見てください。EXPLAINは多くのdbタイプで機能します。

特にsqlPlusについては、sqlplusのAUTOTRACE機能を参照してください

于 2012-08-03T16:17:22.017 に答える
2

これを試して:

http://www.dba-oracle.com/t_explain_plan.htm

実行プランでは、インデックスが使用されるたびにそのインデックスについて言及します。実行計画を読んでください。

于 2012-08-03T16:15:34.007 に答える
1
SQL> explain plan for 2 
     select * from hr.employees;

説明した。

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1445457117

-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 107 | 7704 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| EMPLOYEES | 107 | 7704 | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------------

8 rows selected.

また

SQL> set autotrace traceonly explain
SQL> select * from hr.employees;

Execution Plan
----------------------------------------------------------
Plan hash value: 1445457117

-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 107 | 7704 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| EMPLOYEES | 107 | 7704 | 3 (0)| 00:00:01 |

https://wordpress.com/post/cevikfaruk.wordpress.com/277

于 2018-08-04T19:03:52.897 に答える