楼主: tan9030

一条SQL优化

[复制链接]
论坛徽章:
76
双子座
日期:2015-07-28 14:26:072012新春纪念徽章
日期:2012-02-13 15:09:52ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15鲜花蛋
日期:2011-08-26 02:02:24管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:皮划艇
日期:2011-04-18 11:24:412011新春纪念徽章
日期:2011-02-18 11:43:342011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:15
11#
发表于 2008-3-4 11:41 | 只看该作者
rbo?

使用道具 举报

回复
招聘 : 网络运维
论坛徽章:
2
会员2006贡献徽章
日期:2006-04-17 13:46:34数据库板块每日发贴之星
日期:2008-03-05 01:04:27
12#
 楼主| 发表于 2008-3-4 12:04 | 只看该作者
set autotrace trace expain 看不到统计数据
使用autotrace on/traceonly,运行sql会失败,
不过我刚刚对上面的sql加hint,可以明显的提高性能(如下)

select /*+ ordered full(a) full(b) full(c) full(d) use_hash(a b c d) */ distinct
        b.WL_KEY,
        b.DATA_TYPE,
        b.TEST_AREA,
        b.START_T,
        b.FINISH_T,
        b.TESTER_TYPE,
        b.NODE_NAME,
        b.JOB_NAME,
        b.JOB_REV,
        b.LOT_ID,
        b.SUBLOT_ID,
        b.TEST_TEMP,
        a.TEST_NUMBER,
        d.TEST_NAME,
        d.RESULT_SCALE,
        a.WL_TEST_MIN_VALUE,
        a.WL_TEST_MAX_VALUE,
        a.WL_TEST_SUM_VALUE,
        a.WL_TEST_SUM_SQUARES,
        a.POPULATION,
        b.SITE_NUMBERS,
        b.SITE_COUNT,
        c.WL_PART_CNT,
        c.WL_GOOD_CNT,
        c.WL_RTST_CNT,
        a.WL_TEST_EXECUTION_CNT
from TDB_TEST_RESULTS_WL a,
        TDB_REGISTER_WL b,
        TDB_PART_RESULTS_WL c,
        TDB_JOB_TEST d
where b.WL_KEY = a.WL_KEY
   and b.WL_KEY = c.WL_KEY
   and a.WL_KEY = c.WL_KEY
   and a.SITE_NUMBER = c.SITE_NUMBER
   and a.TEST_NUMBER = d.TEST_NUMBER
   and b.JOB_KEY = d.JOB_KEY
   and d.TEST_NUMBER=0
   and c.WL_PART_CNT>0
   and b.START_T BETWEEN to_date('27-Feb-2008 20:00:00','DD-MON-YYYY HH24:MI:SS')
   AND to_date('27-Feb-2008 23:59:59','DD-MON-YYYY HH24:MI:SS');

使用道具 举报

回复
招聘 : 网络运维
论坛徽章:
2
会员2006贡献徽章
日期:2006-04-17 13:46:34数据库板块每日发贴之星
日期:2008-03-05 01:04:27
13#
 楼主| 发表于 2008-3-4 12:07 | 只看该作者
从4个小时出现rollback segment错误, 现在只需要6分钟就可以得到正确的结果。应该是改变了计算方式,我一会儿把加hint的sql地执行计划贴上来,稍等。

使用道具 举报

回复
招聘 : 网络运维
论坛徽章:
2
会员2006贡献徽章
日期:2006-04-17 13:46:34数据库板块每日发贴之星
日期:2008-03-05 01:04:27
14#
 楼主| 发表于 2008-3-4 12:09 | 只看该作者
原帖由 paulyibinyi 于 2008-3-4 11:41 发表
rbo?



choose.

使用道具 举报

回复
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:19:52
15#
发表于 2008-3-4 12:58 | 只看该作者
看来是选择优化器的时候出的问题

使用道具 举报

回复
论坛徽章:
0
16#
发表于 2008-3-4 13:01 | 只看该作者
1. d.TEST_NUMBER=0   --> 这个对应多少记录数

2. c.WL_PART_CNT>0   --> 这个对应多少记录数

3. b.START_T BETWEEN to_date('27-Feb-2008 20:00:00','DD-MON-YYYY HH24:MI:SS')
   AND to_date('27-Feb-2008 23:59:59','DD-MON-YYYY HH24:MI:SS')); ----> 这个对应多少记录数

使用道具 举报

回复
招聘 : 网络运维
论坛徽章:
2
会员2006贡献徽章
日期:2006-04-17 13:46:34数据库板块每日发贴之星
日期:2008-03-05 01:04:27
17#
 楼主| 发表于 2008-3-4 13:08 | 只看该作者

回复 #15 wobenkl 的帖子

应该是,下面是修改后的执行计划:

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=338271 Card=1 Bytes=
          139)

   1    0   SORT (AGGREGATE)
   2    1     HASH JOIN (Cost=338271 Card=1 Bytes=139)
   3    2       HASH JOIN (Cost=331480 Card=1 Bytes=113)
   4    3         HASH JOIN (Cost=330671 Card=5699 Bytes=421726)
   5    4           TABLE ACCESS (FULL) OF 'TDB_TEST_RESULTS_WL' (Cost
          =327931 Card=208095 Bytes=8115705)

   6    4           TABLE ACCESS (FULL) OF 'TDB_REGISTER_WL' (Cost=257
          4 Card=5463 Bytes=191205)

   7    3         TABLE ACCESS (FULL) OF 'TDB_PART_RESULTS_WL' (Cost=7
          94 Card=33632 Bytes=1311648)

   8    2       TABLE ACCESS (FULL) OF 'TDB_JOB_TEST' (Cost=6790 Card=
          57655 Bytes=1499030)





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

SQL>

使用道具 举报

回复
招聘 : 网络运维
论坛徽章:
2
会员2006贡献徽章
日期:2006-04-17 13:46:34数据库板块每日发贴之星
日期:2008-03-05 01:04:27
18#
 楼主| 发表于 2008-3-4 13:43 | 只看该作者
原帖由 枯荣长老 于 2008-3-4 13:01 发表
1. d.TEST_NUMBER=0   --> 这个对应多少记录数

2. c.WL_PART_CNT>0   --> 这个对应多少记录数

3. b.START_T BETWEEN to_date('27-Feb-2008 20:00:00','DD-MON-YYYY HH24:MI:SS')
   AND to_date('27-Feb-2008 23:59:59','DD-MON-YYYY HH24:MI:SS')); ----> 这个对应多少记录数


--1.  d.TEST_NUMBER=0   -->41263
--2.  c.WL_PART_CNT>0   -->1468553
--3.  b.START_T BETWEEN to_date('27-Feb-2008 20:00:00','DD-MON-YYYY HH24:MI:SS')
   AND to_date('27-Feb-2008 23:59:59','DD-MON-YYYY HH24:MI:SS'));    -->10171

请参考

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
19#
发表于 2008-3-4 13:54 | 只看该作者
里面约束条件最强的是b.START_T BETWEEN to_date('27-Feb-2008 20:00:00','DD-MON-YYYY HH24:MI:SS')
   AND to_date('27-Feb-2008 23:59:59','DD-MON-YYYY HH24:MI:SS')),

尝试改变相关的索引字段的位置,以该字段START_T为开头.

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
20#
发表于 2008-3-4 13:57 | 只看该作者
加提示之前和加之后效率差多少

使用道具 举报

回复

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

本版积分规则 发表回复

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