全文索引性能分析(三)
下面看几个查询:
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
相关文章
