2013-03-14 2 views
4

xmltype 열에 구조화 된 저장소 유형을 사용하고 있습니다. 나는 속성에 대한 색인을 만들려고 노력하고 있지만 어떻게 든 Oracle은 색인을 가져 가지 않고 전체 표 스캔을 수행하지 않습니다. http://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb_indexing.htm#CHDCJIJB에서 설명서를 확인했지만 속성에 대한 색인을 만드는 방법에 대한 예제는 제공하지 않습니다. 누군가가 속성에 xml 색인을 만드는 예를 들어 주시겠습니까?xml 속성을 기반으로하는 Oracle xmltype 열 색인화

감사 케빈

답변

4

여기에 몇 가지 코드를 표시해야합니다 것입니다.

는 여기에 속성에 xmlindex (및 하위 노드)을 생성의 예 : 색인 paths (include (/root/a/@test))에 의해

SQL> create table xmltest (a xmltype); 

Table created. 

SQL> insert into xmltest values ('<root> 
    2 <a test="foo" test2="asd"> 
    3  <b>hi</b> 
    4 </a> 
    5 <a test="foo2" test2="asd2">hi</a> 
    6 </root>'); 

1 row created. 

SQL> commit; 

Commit complete. 

SQL> create index test_xmlindex on xmltest (a) 
    2 indextype is XDB.XMLIndex 
    3 parameters ('paths (include (/root/a/@test))'); 

Index created. 

SQL> set pagesize 100 lines 200 heading off 
SQL> explain plan for select * from xmltest where xmlexists('/root/a[@test="foo"]' passing a); 

Explained. 

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

Plan hash value: 2925043098 

------------------------------------------------------------------------------------------------------------------- 
| Id | Operation      | Name       | Rows | Bytes | Cost (%CPU)| Time  | 
------------------------------------------------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT     |        |  1 | 2026 |  6 (17)| 00:00:01 | 
| 1 | NESTED LOOPS     |        |  1 | 2026 |  6 (17)| 00:00:01 | 
| 2 | VIEW       | VW_SQ_1      |  1 | 12 |  4 (0)| 00:00:01 | 
| 3 | HASH UNIQUE     |        |  1 | 5046 |   |   | 
| 4 |  NESTED LOOPS     |        |  |  |   |   | 
| 5 |  NESTED LOOPS    |        |  1 | 5046 |  4 (0)| 00:00:01 | 
|* 6 |  TABLE ACCESS BY INDEX ROWID| SYS82641_TEST_XMLIN_PATH_TABLE |  1 | 3524 |  2 (0)| 00:00:01 | 
|* 7 |  INDEX RANGE SCAN   | SYS82641_TEST_XMLIN_VALUE_IX |  1 |  |  1 (0)| 00:00:01 | 
|* 8 |  INDEX RANGE SCAN   | SYS82641_TEST_XMLIN_PIKEY_IX |  1 |  |  1 (0)| 00:00:01 | 
|* 9 |  TABLE ACCESS BY INDEX ROWID | SYS82641_TEST_XMLIN_PATH_TABLE |  1 | 1522 |  2 (0)| 00:00:01 | 
| 10 | TABLE ACCESS BY USER ROWID  | XMLTEST      |  1 | 2014 |  1 (0)| 00:00:01 | 
------------------------------------------------------------------------------------------------------------------- 

IT는 아이 <b> 인덱스의 노드가 아닌 test2 속성을 포함한다. /@test을 제외하면 인덱스는 test2 속성도 가져옵니다.

+0

예를 들어 주셔서 감사합니다. 이것은 나에게 좋은 출발점을 제공합니다. –

관련 문제