CREATE TABLE T_CONCAT (ID NUMBER, NAME VARCHAR2(30), TYPE VARCHAR2(30)); INSERT INTO T_CONCAT SELECT ROWNUM, OBJECT_NAME, OBJECT_TYPE FROM ALL_OBJECTS; SQL> CREATE INDEX IND_CONCAT_NAME 2 ON T_CONCAT (NAME); 索引已创建。 SQL> CREATE INDEX IND_CONCAT_TYPE 2 ON T_CONCAT(TYPE); 索引已创建。 SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'T_CONCAT') PL/SQL 过程已成功完成。 SQL> SELECT COUNT(*) FROM T_CONCAT WHERE NAME = 'T_CONCAT' OR TYPE = 'DATABASE LINK'; 2 3 4 Execution Plan ---------------------------------------------------------- Plan hash value: 1182419877 ---------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 34 | 9 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 34 | | | | 2 | BITMAP CONVERSION COUNT | | 1882 | 63988 | 9 (0)| 00:00:01 | | 3 | BITMAP OR | | | | | | | 4 | BITMAP CONVERSION FROM ROWIDS| | | | | | |* 5 | INDEX RANGE SCAN | IND_CONCAT_TYPE | | | 6 (0)| 00:00:01 | | 6 | BITMAP CONVERSION FROM ROWIDS| | | | | | |* 7 | INDEX RANGE SCAN | IND_CONCAT_NAME | | | 3 (0)| 00:00:01 | ---------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 5 - access("TYPE"='DATABASE LINK') 7 - access("NAME"='T_CONCAT') Statistics ---------------------------------------------------------- 1 recursive calls 0 db block gets 5 consistent gets 0 physical reads 0 redo size 422 bytes sent via SQL*Net to client 419 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed SQL> SELECT /*+ USE_CONCAT */ COUNT(*) FROM T_CONCAT WHERE NAME = 'T_CONCAT' OR TYPE = 'DATABASE LINK'; 2 3 4 Execution Plan ---------------------------------------------------------- Plan hash value: 1333442903 ------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 34 | 49 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 34 | | | | 2 | CONCATENATION | | | | | | | 3 | TABLE ACCESS BY INDEX ROWID| T_CONCAT | 2 | 68 | 4 (0)| 00:00:01 | |* 4 | INDEX RANGE SCAN | IND_CONCAT_NAME | 2 | | 3 (0)| 00:00:01 | |* 5 | TABLE ACCESS BY INDEX ROWID| T_CONCAT | 1881 | 63954 | 45 (0)| 00:00:01 | |* 6 | INDEX RANGE SCAN | IND_CONCAT_TYPE | 1881 | | 6 (0)| 00:00:01 | ------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - access("NAME"='T_CONCAT') 5 - filter(LNNVL("NAME"='T_CONCAT')) 6 - access("TYPE"='DATABASE LINK') Statistics ---------------------------------------------------------- 1 recursive calls 0 db block gets 6 consistent gets 0 physical reads 0 redo size 422 bytes sent via SQL*Net to client 419 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed