2012-10-24 20 views
5

bir sorgu yürütülürken bir belirli Oracle endeksi şimdiye Oracle tarafından kullanılmışsa bulmak için bir yol var mı?Monitör endeksi kullanımı

Biz Oracle tarafından ve dolayısıyla bazı sorgular yavaş çalışan alışmak değil şüpheli bir işlev tabanlı oranına sahip olmalıdır. Veritabanına karşı çalıştırılan sorguların bu sorguyu kullanıp kullanmadığını nasıl öğrenebilirim?

+1

belirli bir sorgu dizinini kullanır soruyorsun ya hiç endeksi kullanan tüm sorgular varsa? –

+0

belli indeksi kullanılan tüm herhangi sorgular olsaydı Evet ... soruyordu. Robert tarafından aşağıda cevap Bob ... Sorum olsa farklı küçükken sağ uyum :-) – Guddu

cevap

5

Bir çeşit IDE (örneğin, Oracle'ın SQL Developer'ı, Allround Automations'dan PL/SQL Developer, Toad vb.) Kullanıyorsanız, bunların her birinin bir planın planını dökmesi için bir yolu vardır. menüler ve çevrimiçi yardım.

Eğer (Dost komut satırına "sql" yazmayı deneyin) Eğer üzerinde Autotrace açmak için deyimi yürütme ve planın basılmalıdır SQL * içine almak Artı Eğer.

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 

olduğu gibi bu Mahallenin iyi DBA bu özelliği etkinleştirmek için gerekli büyülü sözleri gerçekleştirmiş olduğunu varsayar.

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. 

Paylaşma ve tadını çıkarın: Bu yapıldığında, ya da sadece bunu yapmak için bir yol daha (tm) istiyorum değilse, sizin için önemli olan sorguyu yerine, aşağıdaki gibi bir şey deneyin.

+0

sayesinde gibi görünüyor ancak bu bilgi hala yararlı oldu. – Guddu

+0

@BobJarvis Bu çok yardımcı oluyor. +10 –