ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 有时候不能太相信CBO啊。

有时候不能太相信CBO啊。

原创 Linux操作系统 作者:wei-xh 时间:2010-05-08 14:30:12 0 删除 编辑
测试表一:test
记录数:  846928 八十多万

测试表二:test1
记录数:  846928 八十多万 表记录数、表结构都与test表一样。

但是两个表建表语句不一样:
测试表一test表的建表语句:
create table test as select * from dba_objects order by object_id;
create index IND_OBJECT_ID on test(object_id);

测试表二test1表的建表语句:
create table test1 as select * from dba_objects order by object_name;
create index IND_OBJECT_ID_1 on test1(object_id);


由于建表语句的不同,导致聚簇因子差别很大。

测试表一test,IND_OBJECT_ID的聚簇因子为54159
测试表二test1,IND_OBJECT_ID_1的聚簇因子779654,很接近表中记录数

分析表:
BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(OWNNAME    => 'SCOTT',
                                TABNAME    => 'TEST',
                                CASCADE    => TRUE,
                                METHOD_OPT => 'FOR  all columns SIZE auto');
  DBMS_STATS.GATHER_TABLE_STATS(OWNNAME    => 'SCOTT',
                                TABNAME    => 'TEST1',
                                CASCADE    => TRUE,
                                METHOD_OPT => 'FOR  all columns SIZE auto');
END;



测试开始:
执行查询,ORACLE对test表采用了索引扫描,对test1表采取了全表扫描。
SQL> set timing on
SQL> select * from (select * from test union select * from test1) where object_id=145;

已选择1112行。
已用时间:  00: 00: 08.30

执行计划
----------------------------------------------------------
Plan hash value: 291511340

--------------------------------------------------------------------------------------------------------
| Id  | Operation                      | Name          | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT               |               | 40139 |  6938K|       |  5202   (2)| 00:01:03 |
|   1 |  VIEW                          |               | 40139 |  6938K|       |  5202   (2)| 00:01:03 |
|   2 |   SORT UNIQUE                  |               | 40139 |  3645K|  9920K|  5202  (66)| 00:01:03 |
|   3 |    UNION-ALL                   |               |       |       |       |            |          |
|   4 |     TABLE ACCESS BY INDEX ROWID| TEST          | 19979 |  1814K|       |  1368   (1)| 00:00:17 |
|*  5 |      INDEX RANGE SCAN          | IND_OBJECT_ID | 19999 |       |       |    47   (3)| 00:00:01 |
|*  6 |     TABLE ACCESS FULL          | TEST1         | 20160 |  1830K|       |  2966   (2)| 00:00:36 |
--------------------------------------------------------------------------------------------------------

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

   5 - access("TEST"."OBJECT_ID"=145)
   6 - filter("TEST1"."OBJECT_ID"=145)


统计信息
----------------------------------------------------------
        189  recursive calls
          0  db block gets
      12383  consistent gets
      11253  physical reads
          0  redo size
      76244  bytes sent via SQL*Net to client
       1199  bytes received via SQL*Net from client
         76  SQL*Net roundtrips to/from client
          6  sorts (memory)
          0  sorts (disk)
       1112  rows processed


[ 本帖最后由 wei-xh 于 2010-5-3 00:38 编辑 ]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22034023/viewspace-662233/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE组成员,DBGeeK用户组发起人。曾在DTCC、ORACLE技术嘉年华、Gdevops等公开场合做过数据库技术专题分享,2017年应Oracle邀请在世界最大的数据库会议OOW上做技术分享。组织翻译了《拨云见日,解密Oracle ASM内核》一书。

注册时间:2009-07-04

  • 博文量
    422
  • 访问量
    2425303