楼主: adamyang

这是CBO无法解决的问题么?

[复制链接]
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-11-12 20:16:58
41#
发表于 2004-12-19 00:20 | 只看该作者

删除索引I_a后的执行计划

SQL> set timing on
SQL> set autotrace traceonly
SQL> select  count(*) from test where a='eygle' and b=1;

已用时间:  00: 00: 00.05

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=149 Card=1 Bytes=13)
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=149 Card=5
           Bytes=65)

   3    2       INDEX (RANGE SCAN) OF 'I_BC' (NON-UNIQUE) (Cost=3 Card
          =147)





Statistics
----------------------------------------------------------
        354  recursive calls
          0  db block gets
        160  consistent gets
        113  physical reads
          0  redo size
        376  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
         11  sorts (memory)
          0  sorts (disk)
          1  rows processed
SQL> select  count(*) from test where a='eygle.com' and b=1;

已用时间:  00: 00: 00.04

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=149 Card=1 Bytes=13)
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=149 Card=1
          42 Bytes=1846)

   3    2       INDEX (RANGE SCAN) OF 'I_BC' (NON-UNIQUE) (Cost=3 Card
          =147)





Statistics
----------------------------------------------------------
        354  recursive calls
          0  db block gets
        160  consistent gets
        113  physical reads
          0  redo size
        376  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
         11  sorts (memory)
          0  sorts (disk)
          1  rows processed

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:06:12
42#
发表于 2004-12-19 14:54 | 只看该作者
我也遇到同样plan, 在metalink上是这样解释的,_b_tree_bitmap_plans is a hidden parameter in 920X with the default value set to TRUE and that is the reason, you see bitmap execution plan with B-Tree indexes.

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
43#
 楼主| 发表于 2004-12-20 09:45 | 只看该作者
偶的第二次测试也遇到这个问题的
去搜索了一下:
http://download-west.oracle.com/ ... /data_acc.htm#17701

CBO计算出的COST,bitmap conversion 小于INDEX (RANGE SCAN) OF 'I_BC'
所以走了bitmap conversion 计划。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
44#
 楼主| 发表于 2004-12-20 10:13 | 只看该作者
看了一下:
这条SQL:select count(*) from test where a='eygle' and b=1;
走bitmap conversion 计划,所有工作都是通过索引完成的;
走INDEX (RANGE SCAN) OF 'I_BC' 计划,的话会有一个   TABLE ACCESS (BY INDEX ROWID) OF 'TEST' 这步计算出的cost会比较高;
所以CBO选择了bitmap conversion 。

如果你用如下SQL:select * from test where a='eygle' and b=1;
就会走INDEX (RANGE SCAN) OF 'I_BC' 计划了。

我的测试:
SQL> select count(*) from test where a='eygle.com' and b=1;

已用时间:  00: 00: 00.06

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=12 Card=1 Bytes=13)
   1    0   SORT (AGGREGATE)
   2    1     BITMAP CONVERSION (COUNT)
   3    2       BITMAP AND
   4    3         BITMAP CONVERSION (FROM ROWIDS)
   5    4           SORT (ORDER BY)
   6    5             INDEX (RANGE SCAN) OF 'I_BC' (NON-UNIQUE) (Cost=
          3 Card=135)

   7    3         BITMAP CONVERSION (FROM ROWIDS)
   8    7           INDEX (RANGE SCAN) OF 'I_A' (NON-UNIQUE) (Cost=273
          1 Card=135)





Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       2764  consistent gets
          0  physical reads
          0  redo size
        376  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> select /*+index(test i_bc)*/count(*) from test where a='eygle.com' and b=1;


已用时间:  00: 00: 00.02

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=137 Card=1 Bytes=13)
   1    0   SORT (AGGREGATE)
   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=137 Card=1
          31 Bytes=1703)

   3    2       INDEX (RANGE SCAN) OF 'I_BC' (NON-UNIQUE) (Cost=3 Card
          =135)





Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        361  consistent gets
          0  physical reads
          0  redo size
        376  bytes sent via SQL*Net to client
        503  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 *  from test where a='eygle.com' and b=1;

已选择30行。

已用时间:  00: 00: 00.02

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=137 Card=131 Bytes=2
          227)

   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=137 Card=131
           Bytes=2227)

   2    1     INDEX (RANGE SCAN) OF 'I_BC' (NON-UNIQUE) (Cost=3 Card=1
          35)





Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        114  consistent gets
          0  physical reads
          0  redo size
        800  bytes sent via SQL*Net to client
        514  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         30  rows processed

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表