楼主: tan9030

一条SQL优化

[复制链接]
招聘 : 数据库管理员
论坛徽章:
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
21#
发表于 2008-3-4 13:59 | 只看该作者
原帖由 ZALBB 于 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为开头.

提示之后都走全表扫描了。是不是可以考虑b表不全扫。

使用道具 举报

回复
论坛徽章:
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
22#
发表于 2008-3-4 14:02 | 只看该作者
原帖由 foxmile 于 2008-3-4 13:59 发表

提示之后都走全表扫描了。是不是可以考虑b表不全扫。


它那索引不是以该时间字段开头.

使用道具 举报

回复
招聘 : 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
23#
发表于 2008-3-4 14:05 | 只看该作者
原帖由 ZALBB 于 2008-3-4 14:02 发表


它那索引不是以该时间字段开头.

不是说单列索引吗?

使用道具 举报

回复
招聘 : 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
24#
发表于 2008-3-4 14:09 | 只看该作者
hint前是RBO,hint后走了CBO

使用道具 举报

回复
招聘 : 网络运维
论坛徽章:
2
会员2006贡献徽章
日期:2006-04-17 13:46:34数据库板块每日发贴之星
日期:2008-03-05 01:04:27
25#
 楼主| 发表于 2008-3-4 14:13 | 只看该作者
原帖由 ZALBB 于 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为开头.


你的意思是要把start_t做为表 b的第一个字段?

使用道具 举报

回复
招聘 : 网络运维
论坛徽章:
2
会员2006贡献徽章
日期:2006-04-17 13:46:34数据库板块每日发贴之星
日期:2008-03-05 01:04:27
26#
 楼主| 发表于 2008-3-4 14:15 | 只看该作者
原帖由 foxmile 于 2008-3-4 13:57 发表
加提示之前和加之后效率差多少


从之前的执行4个多小时出现rollback segment too samll问题,到现在6分钟之内执行结束,并且没有任何错误。

使用道具 举报

回复
论坛徽章:
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
27#
发表于 2008-3-4 14:18 | 只看该作者
原帖由 tan9030 于 2008-3-4 14:13 发表

你的意思是要把start_t做为表 b的第一个字段?


我看错了,以为那个索引是复合索引,start_t是第2个字段.

既然start_t是单列索引,加提示走该索引看看效果如何.

使用道具 举报

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

不是说单列索引吗?



表b的START_T有单独的一个索引,没有和别的column建立一个索引

使用道具 举报

回复
招聘 : 网络运维
论坛徽章:
2
会员2006贡献徽章
日期:2006-04-17 13:46:34数据库板块每日发贴之星
日期:2008-03-05 01:04:27
29#
 楼主| 发表于 2008-3-4 14:22 | 只看该作者
原帖由 anlinew 于 2008-3-4 14:09 发表
hint前是RBO,hint后走了CBO


我的数据库时使用choose参数,估计数据库没有对表,索引进行过分析,所以走了rbo,
如果分析了表和索引,估计会走cbo的,你觉得呢?

使用道具 举报

回复
论坛徽章:
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
30#
发表于 2008-3-4 14:24 | 只看该作者

老王,看看这语句的执行计划.

select 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,
     (select * from TDB_REGISTER_WL
      where 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'))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

使用道具 举报

回复

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

本版积分规则 发表回复

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