技术开发 频道

全文索引性能分析(三)

  下面看几个查询:

SQL> SELECT * FROM T WHERE CONTAINS(NAME, 'SYS') > 0 2 AND STATUS = 'INVALID' 3 AND TYPE = 'PROCEDURE'; ID NAME CREATED TYPE STATUS ---------- ------------------------------ ---------- ------------------ ------- 6735 SYS DBMS_LOGMNR_FFVTOLOGMNRT 2005-09-21 PROCEDURE INVALID 6741 SYS DBMS_LOGMNR_OCTOLOGMNRT 2005-09-21 PROCEDURE INVALID

  执行计划

---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=56) 1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T' (Cost=2 Card=1 Bytes=56) 2 1 BITMAP CONVERSION (TO ROWIDS) 3 2 BITMAP AND 4 3 BITMAP INDEX (SINGLE VALUE) OF 'IND_B_T_STATUS' 5 3 BITMAP INDEX (SINGLE VALUE) OF 'IND_B_T_TYPE'

  统计信息

---------------------------------------------------------- 29 recursive calls 0 db block gets 56 consistent gets 0 physical reads 0 redo size 611 bytes sent via SQL*Net to client 364 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 2 rows processed SQL> SELECT * FROM T WHERE CONTAINS(NAME, 'SYS') > 0 2 AND STATUS = 'VALID' 3 AND TYPE = 'PROCEDURE'; ID NAME CREATED TYPE STATUS ---------- ------------------------------ ---------- ------------------ ------- 25701 SYSTEM ORA$_SYS_REP_AUTH 2005-09-21 PROCEDURE VALID 25894 OUTLN ORA$GRANT_SYS_SELECT 2005-09-21 PROCEDURE VALID . . . 10294 SYS XMLVALIDATE 2005-09-21 PROCEDURE VALID

  已选择26行。

  执行计划

---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=13 Card=27 Bytes=1512) 1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T' (Cost=13 Card=27 Bytes=1512) 2 1 BITMAP CONVERSION (TO ROWIDS) 3 2 BITMAP INDEX (SINGLE VALUE) OF 'IND_B_T_TYPE'

  统计信息

---------------------------------------------------------- 60 recursive calls 0 db block gets 124 consistent gets 0 physical reads 0 redo size 1483 bytes sent via SQL*Net to client 375 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 26 rows processed SQL> SELECT * FROM T WHERE CONTAINS(NAME, 'TEST') > 0 2 AND STATUS = 'VALID' 3 AND TYPE = 'TABLE'; ID NAME CREATED TYPE STATUS ---------- ------------------------------ ---------- ------------------ ------- 29513 NDMAIN MLOG$_TEST_CAT_ORG 2005-10-15 TABLE VALID 29514 NDMAIN MLOG$_TEST_CAT_ORG2 2005-10-15 TABLE VALID . . . 31309 TEST TT2 2006-08-02 TABLE VALID

  已选择49行。

  执行计划

---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=24 Card=5 Bytes=280) 1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T' (Cost=24 Card=5 Bytes=280) 2 1 BITMAP CONVERSION (TO ROWIDS) 3 2 BITMAP AND 4 3 BITMAP INDEX (SINGLE VALUE) OF 'IND_B_T_TYPE' 5 3 BITMAP CONVERSION (FROM ROWIDS) 6 5 SORT (ORDER BY) 7 6 DOMAIN INDEX OF 'IND_T_NAME' (Cost=19)

  统计信息

---------------------------------------------------------- 19 recursive calls 0 db block gets 59 consistent gets 0 physical reads 0 redo size 2822 bytes sent via SQL*Net to client 397 bytes received via SQL*Net from client 5 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 49 rows processed

  上面的3个查询只有输入的值有所差别,但是Oracle选择了3种不同的执行计划,而且从执行效果上看,这些选择都是正确的。

 

0
相关文章