5

クエリの実行時に特定のOracleインデックスがOracleによって使用されたことがあるかどうかを確認する方法はありますか?

関数ベースのインデックスがありますが、これはOracleで使用されていないため、一部のクエリの実行が遅くなっていると思われます。データベースに対して実行されたクエリがこのクエリを使用しているかどうかを確認するにはどうすればよいですか?

4

2 に答える 2

7

質問が次の場合:インデックスを使用するクエリがあるかどうか。

ALTER INDEX myindex MONITORING USAGE;

数日/月/年待つ:

SELECT *
FROM   v$object_usage
WHERE index_name = 'MYINDEX';

http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes004.htm#i1006905

于 2012-10-24T07:46:53.490 に答える
5

ある種のIDE(たとえば、OracleのSQL Developer、AllroundAutomationsのPL/ SQL Developer、Toadなど)を使用している場合、それぞれにステートメントの計画をダンプする方法があります。 -ラインヘルプ。

SQL * Plusに入ることができる場合(使いやすいコマンドラインで「sql」と入力してみてください)、自動トレースをオンにしてステートメントを実行すると、計画が印刷されます。のように

SQL> set autotrace on
SQL> select * from dept where deptno = 40;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        40 OPERATIONS     BOSTON

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=18)
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' (Cost=1 Card=1 Bytes=18)
   2    1     INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          2  consistent gets
          0  physical reads
          0  redo size
        499  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

これは、友好的な近所のDBAがこの機能を有効にするために必要な呪文を実行したことを前提としています。これが行われていない場合、またはOne More Way(tm)でこれを実行したい場合は、次のようなものを試して、気になるクエリに置き換えてください。

SQL> EXPLAIN PLAN FOR select * from dept where deptno = 40;
Explained.

SQL> set linesize 132

SQL> SELECT * FROM TABLE( dbms_xplan.display);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------
Plan hash value: 2852011669

---------------------------------------------------------------------------------------
| Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |         |     1 |    20 |     1   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| DEPT    |     1 |    20 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | PK_DEPT |     1 |       |     0   (0)| 00:00:01 |
---------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("DEPTNO"=40)

14 rows selected.

共有してお楽しみください。

于 2012-10-24T01:56:19.513 に答える