12
返回列表 发新帖
楼主: d.c.b.a

OR条件引起的问题

[复制链接]
论坛徽章:
27
会员2007贡献徽章
日期:2007-09-26 18:42:102011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:排球
日期:2011-03-03 12:19:332010广州亚运会纪念徽章:篮球
日期:2011-03-10 14:25:06ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15灰彻蛋
日期:2011-12-28 16:56:322012新春纪念徽章
日期:2012-01-04 11:50:44迷宫蛋
日期:2012-03-09 15:14:20蜘蛛蛋
日期:2012-03-26 09:46:32
11#
发表于 2008-3-19 13:59 | 只看该作者
SQL> desc d
Name                  
----------------
A                     
B                     
C                     
SQL> select count(*) from d;

  COUNT(*)
----------
     10004

SQL> select table_name,index_name,column_name from user_ind_columns where table_name='D';

TABLE_NAME INDEX_NAME COLUMN_NAM
---------- ---------- ----------
D          D_B        B
D          D_A        A

SQL> analyze table d compute statistics for table for all indexes for all indexed columns;

Table analyzed.

SQL> set autotrace on
SQL>  SELECT * FROM d WHERE A=10 AND (B IS NULL OR B > 100);

         A          B C
---------- ---------- ----------------------------------------
        10            aa
        10        200 aa


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=27)
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'D' (Cost=2 Card=1 Bytes=
          27)

   2    1     INDEX (RANGE SCAN) OF 'D_A' (NON-UNIQUE) (Cost=1 Card=1)




Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          6  consistent gets
          0  physical reads
          0  redo size
        509  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)
          2  rows processed

SQL> SELECT * FROM d WHERE A=10 AND NVL(B,101) > 100;

         A          B C
---------- ---------- ----------------------------------------
        10            aa
        10        200 aa


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=27)
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'D' (Cost=2 Card=1 Bytes=
          27)

   2    1     INDEX (RANGE SCAN) OF 'D_A' (NON-UNIQUE) (Cost=1 Card=1)




Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          6  consistent gets
          0  physical reads
          0  redo size
        509  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)
          2  rows processed

好像逻辑读是一样的嘛
^_^

使用道具 举报

回复
论坛徽章:
27
会员2007贡献徽章
日期:2007-09-26 18:42:102011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:排球
日期:2011-03-03 12:19:332010广州亚运会纪念徽章:篮球
日期:2011-03-10 14:25:06ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15灰彻蛋
日期:2011-12-28 16:56:322012新春纪念徽章
日期:2012-01-04 11:50:44迷宫蛋
日期:2012-03-09 15:14:20蜘蛛蛋
日期:2012-03-26 09:46:32
12#
发表于 2008-3-19 14:02 | 只看该作者
忘了说了 我的版本是
SQL> select * from v$version;

BANNER
-----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE    9.2.0.1.0       Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
13#
发表于 2008-3-19 14:08 | 只看该作者
索引里应该含b字段了的吧?

使用道具 举报

回复
论坛徽章:
27
会员2007贡献徽章
日期:2007-09-26 18:42:102011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:排球
日期:2011-03-03 12:19:332010广州亚运会纪念徽章:篮球
日期:2011-03-10 14:25:06ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15灰彻蛋
日期:2011-12-28 16:56:322012新春纪念徽章
日期:2012-01-04 11:50:44迷宫蛋
日期:2012-03-09 15:14:20蜘蛛蛋
日期:2012-03-26 09:46:32
14#
发表于 2008-3-19 14:22 | 只看该作者
SQL> SELECT * FROM d WHERE A=10 AND (B IS NULL OR B > 100);

         A          B C
---------- ---------- ----------------------------------------
        10        200 aa
        10            aa


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=1 Bytes=28)
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'D' (Cost=3 Card=1 Bytes=
          28)

   2    1     INDEX (RANGE SCAN) OF 'D_A_B' (NON-UNIQUE) (Cost=2 Card=
          1)





Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          7  consistent gets
          0  physical reads
          0  redo size
        509  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)
          2  rows processed

SQL> SELECT * FROM d WHERE A=10 AND NVL(B,101) > 100;

         A          B C
---------- ---------- ----------------------------------------
        10        200 aa
        10            aa


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=1 Bytes=28)
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'D' (Cost=3 Card=1 Bytes=
          28)

   2    1     INDEX (RANGE SCAN) OF 'D_A_B' (NON-UNIQUE) (Cost=2 Card=
          1)





Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          5  consistent gets
          0  physical reads
          0  redo size
        509  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)
          2  rows processed

少了2个逻辑读,可能是我数据太少了吧
学习学习,谢谢lz共享

使用道具 举报

回复
论坛徽章:
42
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23
15#
 楼主| 发表于 2008-3-19 15:18 | 只看该作者
原帖由 anlinew 于 2008-3-19 13:58 发表
二、三应该可以看作是oracle CBO算法需要优化的地发


CBO一直在向语义理解方面进军,不过这个很难了,象人工智能一样的东东了.

[ 本帖最后由 d.c.b.a 于 2008-3-19 16:51 编辑 ]

使用道具 举报

回复
论坛徽章:
42
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23
16#
 楼主| 发表于 2008-3-19 15:19 | 只看该作者
原帖由 carcase 于 2008-3-19 14:02 发表
忘了说了 我的版本是
SQL> select * from v$version;

BANNER
-----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE    9.2.0.1.0       Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production



你的数据量太少了.

使用道具 举报

回复
论坛徽章:
14
生肖徽章2007版:蛇
日期:2008-03-24 17:16:29生肖徽章2007版:猴
日期:2009-02-09 15:03:45生肖徽章2007版:猪
日期:2009-03-16 10:15:58生肖徽章2007版:龙
日期:2009-03-27 12:02:52生肖徽章2007版:虎
日期:2009-04-15 17:44:55
17#
发表于 2008-3-19 16:06 | 只看该作者
学习了先

使用道具 举报

回复
论坛徽章:
59
狮子座
日期:2016-03-26 13:35:402013年新春福章
日期:2013-02-25 14:51:24双黄蛋
日期:2013-02-25 11:06:15ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20灰彻蛋
日期:2012-04-25 13:19:33紫蛋头
日期:2012-03-14 11:16:09最佳人气徽章
日期:2012-03-13 17:39:18玉石琵琶
日期:2012-02-21 15:04:38鲜花蛋
日期:2011-11-30 14:13:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
18#
发表于 2008-3-19 16:31 | 只看该作者
原帖由 d.c.b.a 于 2008-3-19 15:18 发表


CBO一起在想语义理解方面进军,不过这个很难了,象人工智能一样的东东了.


深有同感,sql语句越复杂,子查询、表连接越多,各种各样的条件越多cbo就越难做出正确判断

使用道具 举报

回复
论坛徽章:
42
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23
19#
 楼主| 发表于 2008-3-19 21:30 | 只看该作者
原帖由 translate 于 2008-3-19 13:41 发表




   学到什么了?



学到什么是你的事了,不是我的事.

使用道具 举报

回复

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

本版积分规则 发表回复

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