执行计划之CONCATENATION

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

posted @ 2013-12-08 18:22  czcb  阅读(289)  评论(0编辑  收藏  举报