优化原则测试1:先执行过滤掉大部份数据的SQL语句,通过过滤条件搭配减少结果集;

版本信息

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production


T1表信息

***********
Table Level
***********


Table                   Number                 Empty Average    Chain Average Global User           Sample Date
Name                   of Rows   Blocks       Blocks   Space    Count Row Len Stats  Stats            Size MM-DD-YYYY
--------------- -------------- -------- ------------ ------- -------- ------- ------ ------ -------------- ----------
T1                   1,163,041   17,263            0       0        0      97 YES    NO          1,163,041 02-18-2014

Column                    Column                       Distinct          Number     Number Global User           Sample Date
Name                      Details                        Values Density Buckets      Nulls Stats  Stats            Size MM-DD-YYYY
------------------------- ------------------------ ------------ ------- ------- ---------- ------ ------ -------------- ----------
OWNER                     VARCHAR2(30)                       26       0       1          0 YES    NO          1,163,041 02-18-2014
OBJECT_NAME               VARCHAR2(128)                  43,908       0       1          0 YES    NO          1,163,041 02-18-2014
SUBOBJECT_NAME            VARCHAR2(30)                      165       0       1  1,156,545 YES    NO              6,496 02-18-2014
OBJECT_ID                 NUMBER(22)                     73,752       0     254          0 YES    NO              5,508 02-18-2014
DATA_OBJECT_ID            NUMBER(22)                      7,698       0       1  1,039,136 YES    NO            123,905 02-18-2014
OBJECT_TYPE               VARCHAR2(19)                       44       0       1          0 YES    NO          1,163,041 02-18-2014
CREATED                   DATE                            1,132       0       1          0 YES    NO          1,163,041 02-18-2014
LAST_DDL_TIME             DATE                            1,230       0       1          0 YES    NO          1,163,041 02-18-2014
TIMESTAMP                 VARCHAR2(19)                    1,302       0       1          0 YES    NO          1,163,041 02-18-2014
STATUS                    VARCHAR2(7)                         2       1       1          0 YES    NO          1,163,041 02-18-2014
TEMPORARY                 VARCHAR2(1)                         2       1       1          0 YES    NO          1,163,041 02-18-2014
GENERATED                 VARCHAR2(1)                         2       1       1          0 YES    NO          1,163,041 02-18-2014
SECONDARY                 VARCHAR2(1)                         2       1       1          0 YES    NO          1,163,041 02-18-2014
NAMESPACE                 NUMBER(22)                         20       0       1          0 YES    NO          1,163,041 02-18-2014
EDITION_NAME              VARCHAR2(30)                        0       0       0  1,163,041 YES    NO                    02-18-2014

                              B                                        Average     Average
Index                      Tree Leaf       Distinct         Number Leaf Blocks Data Blocks      Cluster Global User           Sample Date
Name            Unique    Level Blks           Keys        of Rows     Per Key     Per Key       Factor Stats  Stats            Size MM-DD-YYYY
--------------- --------- ----- ---- -------------- -------------- ----------- ----------- ------------ ------ ------ -------------- ----------
IDX_T1_OBJECTID NONUNIQUE     2 ####         73,752      1,163,041           1          14    1,054,525 YES    NO          1,163,041 02-18-2014
IDX_OBJECT_TYPE NONUNIQUE     2 ####             44      1,163,041          72       1,316       57,941 YES    NO          1,163,041 02-18-2014
IDX_T1_OBJECT_N NONUNIQUE     2 ####         43,908      1,156,718           1          18      814,218 YES    NO            225,791 02-18-2014
AME


Index           Column                     Col Column
Name            Name                       Pos Details
--------------- ------------------------- ---- ------------------------
IDX_OBJECT_TYPE OBJECT_TYPE                  1 VARCHAR2(19)
IDX_T1_OBJECTID OBJECT_ID                    1 NUMBER(22)
IDX_T1_OBJECT_N OBJECT_NAME                  1 VARCHAR2(128)
AME


T2表的信息

***********
Table Level
***********


Table                   Number                 Empty Average    Chain Average Global User           Sample Date
Name                   of Rows   Blocks       Blocks   Space    Count Row Len Stats  Stats            Size MM-DD-YYYY
--------------- -------------- -------- ------------ ------- -------- ------- ------ ------ -------------- ----------
T2                      72,685    1,062            0       0        0      97 YES    NO             72,685 02-18-2014

Column                    Column                       Distinct          Number     Number Global User           Sample Date
Name                      Details                        Values Density Buckets      Nulls Stats  Stats            Size MM-DD-YYYY
------------------------- ------------------------ ------------ ------- ------- ---------- ------ ------ -------------- ----------
OWNER                     VARCHAR2(30)                       26       0      18          0 YES    NO              5,469 02-18-2014
OBJECT_NAME               VARCHAR2(128)                  43,908       0       1          0 YES    NO             72,685 02-18-2014
SUBOBJECT_NAME            VARCHAR2(30)                      165       0       1     72,279 YES    NO                406 02-18-2014
OBJECT_ID                 NUMBER(22)                     72,685       0       1          0 YES    NO             72,685 02-18-2014
DATA_OBJECT_ID            NUMBER(22)                      7,699       0       1     64,946 YES    NO              7,739 02-18-2014
OBJECT_TYPE               VARCHAR2(19)                       44       0      30          0 YES    NO              5,469 02-18-2014
CREATED                   DATE                            1,133       0       1          0 YES    NO             72,685 02-18-2014
LAST_DDL_TIME             DATE                            1,231       0       1          0 YES    NO             72,685 02-18-2014
TIMESTAMP                 VARCHAR2(19)                    1,303       0       1          0 YES    NO             72,685 02-18-2014
STATUS                    VARCHAR2(7)                         2       1       1          0 YES    NO             72,685 02-18-2014
TEMPORARY                 VARCHAR2(1)                         2       1       1          0 YES    NO             72,685 02-18-2014
GENERATED                 VARCHAR2(1)                         2       1       1          0 YES    NO             72,685 02-18-2014
SECONDARY                 VARCHAR2(1)                         2       1       1          0 YES    NO             72,685 02-18-2014
NAMESPACE                 NUMBER(22)                         20       0       1          0 YES    NO             72,685 02-18-2014
EDITION_NAME              VARCHAR2(30)                        0       0       0     72,685 YES    NO                    02-18-2014

                              B                                        Average     Average
Index                      Tree Leaf       Distinct         Number Leaf Blocks Data Blocks      Cluster Global User           Sample Date
Name            Unique    Level Blks           Keys        of Rows     Per Key     Per Key       Factor Stats  Stats            Size MM-DD-YYYY
--------------- --------- ----- ---- -------------- -------------- ----------- ----------- ------------ ------ ------ -------------- ----------
IDX_T2_TYPE_OWN NONUNIQUE     1  258            237         72,685           1          13        3,186 NO     NO             72,685 02-18-2014
ER


Index           Column                     Col Column
Name            Name                       Pos Details
--------------- ------------------------- ---- ------------------------
IDX_T2_TYPE_OWN OBJECT_TYPE                  1 VARCHAR2(19)
ER

                OWNER                        2 VARCHAR2(30)
T2_IDX          OBJECT_ID                    1 NUMBER(22)


第1次执行

SQL_ID  07nvz4ghrbb8u, child number 0

-------------------------------------
select /*+ gather_plan_statistics   */distinct
t1.object_type,t1.status,t11.object_name,t11.status from t1,t1 t11
where t1.object_id=t11.object_id and t1.object_name in (select
distinct  object_name from t2 where object_type='INDEX' and
owner='SCOTT' ) and t11.object_name in (select distinct  object_name
from t2 where object_type='INDEX' and owner='SCOTT')

Plan hash value: 3070061988

----------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                          | Name               | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
----------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                   |                    |      1 |        |      2 | 00:00:00.80 |   25590 |       |       |     |
|   1 |  HASH UNIQUE                       |                    |      1 |      4 |      2 |00:00:00.80 |   25590 |   941K|   941K|  468K (0)|
|   2 |   NESTED LOOPS                     |                    |      1 |        |    576 |00:00:03.92 |   25590 |       |       |     |
|   3 |    NESTED LOOPS                    |                    |      1 |      4 |    576 |00:00:03.91 |   25014 |       |       |     |
|   4 |     NESTED LOOPS                   |                    |      1 |     14 |     96 |00:00:00.01 |     112 |       |       |     |
|   5 |      MERGE JOIN CARTESIAN          |                    |      1 |      1 |      4 |00:00:00.01 |       6 |       |       |     |
|   6 |       TABLE ACCESS BY INDEX ROWID  | T2                 |      1 |      1 |      2 |00:00:00.01 |       3 |       |       |     |
|*  7 |        INDEX RANGE SCAN            | IDX_T2_TYPE_OWNER  |      1 |      1 |      2 |00:00:00.01 |       2 |       |       |     |
|   8 |       BUFFER SORT                  |                    |      2 |      1 |      4 |00:00:00.01 |       3 |  2048 |  2048 | 2048  (0)|
|   9 |        TABLE ACCESS BY INDEX ROWID | T2                 |      1 |      1 |      2 |00:00:00.01 |       3 |       |       |     |
|* 10 |         INDEX RANGE SCAN           | IDX_T2_TYPE_OWNER  |      1 |      1 |      2 |00:00:00.01 |       2 |       |       |     |
|  11 |      TABLE ACCESS BY INDEX ROWID   | T1                 |      4 |     26 |     96 |00:00:00.01 |     106 |       |       |     |
|* 12 |       INDEX RANGE SCAN             | IDX_T1_OBJECT_NAME |      4 |     26 |     96 |00:00:00.01 |      10 |       |       |     |
|  13 |     BITMAP CONVERSION TO ROWIDS    |                    |     96 |        |    576 |00:00:00.80 |   24902 |       |       |     |
|  14 |      BITMAP AND                    |                    |     96 |        |     60 |00:00:00.80 |   24902 |       |       |     |
|  15 |       BITMAP CONVERSION FROM ROWIDS|                    |     96 |        |     96 |00:00:00.01 |      24 |       |       |     |
|* 16 |        INDEX RANGE SCAN            | IDX_T1_OBJECT_NAME |     96 |     16 |   2304 |00:00:00.01 |      24 |       |       |     |
|  17 |       BITMAP CONVERSION FROM ROWIDS|                    |     96 |        |    120 |00:00:00.79 |   24878 |       |       |     |
|* 18 |        INDEX RANGE SCAN            | IDX_T1_OBJECTID    |     96 |     16 |   7201K|00:00:00.94 |   24878 |       |       |     |
|  19 |    TABLE ACCESS BY INDEX ROWID     | T1                 |    576 |      1 |    576 |00:00:00.01 |     576 |       |       |     |
----------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   7 - access("OBJECT_TYPE"='INDEX' AND "OWNER"='SCOTT')
  10 - access("OBJECT_TYPE"='INDEX' AND "OWNER"='SCOTT')
  12 - access("T1"."OBJECT_NAME"="OBJECT_NAME")
  16 - access("T11"."OBJECT_NAME"="OBJECT_NAME")
  18 - access("T1"."OBJECT_ID"="T11"."OBJECT_ID")


第2次执行,关闭位图转换功能

SQL_ID  9ds876bm27n8x, child number 0
-------------------------------------
select /*+ gather_plan_statistics  opt_param('_b_tree_bitmap_plans','fal
se') */
distinct  t1.object_type,t1.status,t11.object_name,t11.status
from t1,t1 t11 where t1.object_id=t11.object_id and t1.object_name in
(select  distinct  object_name from t2 where object_type='INDEX' and
owner='SCOTT' ) and t11.object_name in (select distinct  object_name
from t2 where object_type='INDEX' and owner='SCOTT')

Plan hash value: 1432114955

---------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                         | Name               | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
---------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                    |      1 |        |      2 |00:00:04.84 |     128K|       |       |    |
|   1 |  HASH UNIQUE                      |                    |      1 |      4 |      2 |00:00:04.84 |     128K|   941K|   941K|  480K (0)|
|   2 |   NESTED LOOPS                    |                    |      1 |        |    576 |00:00:13.80 |     128K|       |       |    |
|   3 |    NESTED LOOPS                   |                    |      1 |      4 |   7201K|00:00:02.11 |   24990 |       |       |    |
|   4 |     NESTED LOOPS                  |                    |      1 |     14 |     96 |00:00:00.01 |     112 |       |       |    |
|   5 |      MERGE JOIN CARTESIAN         |                    |      1 |      1 |      4 |00:00:00.01 |       6 |       |       |    |
|   6 |       TABLE ACCESS BY INDEX ROWID | T2                 |      1 |      1 |      2 |00:00:00.01 |       3 |       |       |    |
|*  7 |        INDEX RANGE SCAN           | IDX_T2_TYPE_OWNER  |      1 |      1 |      2 |00:00:00.01 |       2 |       |       |    |
|   8 |       BUFFER SORT                 |                    |      2 |      1 |      4 |00:00:00.01 |       3 |  2048 |  2048 | 2048  (0)|
|   9 |        TABLE ACCESS BY INDEX ROWID| T2                 |      1 |      1 |      2 |00:00:00.01 |       3 |       |       |    |
|* 10 |         INDEX RANGE SCAN          | IDX_T2_TYPE_OWNER  |      1 |      1 |      2 |00:00:00.01 |       2 |       |       |    |
|  11 |      TABLE ACCESS BY INDEX ROWID  | T1                 |      4 |     26 |     96 |00:00:00.01 |     106 |       |       |    |
|* 12 |       INDEX RANGE SCAN            | IDX_T1_OBJECT_NAME |      4 |     26 |     96 |00:00:00.01 |      10 |       |       |    |
|* 13 |     INDEX RANGE SCAN              | IDX_T1_OBJECTID    |     96 |     16 |   7201K|00:00:01.02 |   24878 |       |       |    |
|* 14 |    TABLE ACCESS BY INDEX ROWID    | T1                 |   7201K|      1 |    576 |00:00:02.38 |     103K|       |       |    |
---------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   7 - access("OBJECT_TYPE"='INDEX' AND "OWNER"='SCOTT')
  10 - access("OBJECT_TYPE"='INDEX' AND "OWNER"='SCOTT')
  12 - access("T1"."OBJECT_NAME"="OBJECT_NAME")
  13 - access("T1"."OBJECT_ID"="T11"."OBJECT_ID")
  14 - filter("T11"."OBJECT_NAME"="OBJECT_NAME")

第3次执行,重新改写SQL语句


SQL_ID  a92twbz0094wh, child number 0
-------------------------------------
select /*+ gather_plan_statistics  opt_param('_b_tree_bitmap_plans','fal
se') */distinct  t1.object_type,t1.status,t11.object_name,t11.status
from t1,t1 t11,(select  distinct  object_name from t2 where
object_type='INDEX' and owner='SCOTT' ) cc where
t1.object_id=t11.object_id and t1.object_name=cc.object_name and
t11.object_name=cc.object_name

Plan hash value: 1494189659

-------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name               | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
-------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |                    |      1 |        |      2 |00:00:00.01 |    1361 |       |       |  |
|   1 |  HASH UNIQUE                    |                    |      1 |      5 |      2 |00:00:00.01 |    1361 |   941K|   941K|  491K (0)|
|   2 |   NESTED LOOPS                  |                    |      1 |        |    512 |00:00:00.01 |    1361 |       |       |  |
|   3 |    NESTED LOOPS                 |                    |      1 |      5 |   1280 |00:00:00.01 |      81 |       |       |  |
|   4 |     NESTED LOOPS                |                    |      1 |     19 |     48 |00:00:00.01 |      57 |       |       |  |
|   5 |      TABLE ACCESS BY INDEX ROWID| T2                 |      1 |      1 |      2 |00:00:00.01 |       3 |       |       |  |
|*  6 |       INDEX RANGE SCAN          | IDX_T2_TYPE_OWNER  |      1 |      1 |      2 |00:00:00.01 |       2 |       |       |  |
|   7 |      TABLE ACCESS BY INDEX ROWID| T1                 |      2 |     26 |     48 |00:00:00.01 |      54 |       |       |  |
|*  8 |       INDEX RANGE SCAN          | IDX_T1_OBJECT_NAME |      2 |     26 |     48 |00:00:00.01 |       6 |       |       |  |
|*  9 |     INDEX RANGE SCAN            | IDX_T1_OBJECT_NAME |     48 |     26 |   1280 |00:00:00.01 |      24 |       |       |  |
|* 10 |    TABLE ACCESS BY INDEX ROWID  | T1                 |   1280 |      1 |    512 |00:00:00.01 |    1280 |       |       |  |
-------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   6 - access("OBJECT_TYPE"='INDEX' AND "OWNER"='SCOTT')
   8 - access("T1"."OBJECT_NAME"="OBJECT_NAME")
   9 - access("T11"."OBJECT_NAME"="OBJECT_NAME")
  10 - filter("T1"."OBJECT_ID"="T11"."OBJECT_ID")

以上执行可得出结论:想减低COST,先执行全力降低结果集的语句(想方法设法过滤掉不必要的数据),才能降低整体的COST和执行的速度;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值