123
返回列表 发新帖
楼主: yyp2009

update优化

[复制链接]
论坛徽章:
7
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:猴
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53嫦娥
日期:2008-07-08 11:25:29奥运会纪念徽章:垒球
日期:2008-07-22 23:37:50奥运会纪念徽章:跳水
日期:2008-07-31 22:00:562010新春纪念徽章
日期:2010-01-04 08:33:08
发表于 2011-1-27 18:50 | 显示全部楼层
想说的是SQL写法是SQL调优时候最需要关注的,虽然ORACLE的优化器已经有一些自己转化等价SQL的能力。
尤其是IN和EXISTS这一对,性能差别可能是很大的。
下面这个我以前写的,可以参考一下,
http://wilson2006.itpub.net/post/37155/459347

使用道具 举报

回复
认证徽章
论坛徽章:
58
生肖徽章2007版:马
日期:2009-11-06 23:12:33授权会员
日期:2013-01-10 14:38:592013年新春福章
日期:2013-02-25 14:51:24马自达
日期:2013-08-07 10:54:45红旗
日期:2013-08-09 13:48:48劳斯莱斯
日期:2013-09-12 15:56:37萤石
日期:2013-10-31 08:44:19优秀写手
日期:2013-12-18 09:29:13Jeep
日期:2014-01-14 10:53:432014年新春福章
日期:2014-02-18 16:43:09
发表于 2011-1-28 08:45 | 显示全部楼层
看了,写的不错的!in一般分区表上是不用处理的,对in操作会分区修剪的。但是就普通表的话in好还是exsits好要看要join表的相对大小的,具体需要具体分析的。

使用道具 举报

回复
论坛徽章:
11
生肖徽章2007版:鸡
日期:2009-05-11 17:35:332011新春纪念徽章
日期:2011-01-04 10:37:102010年世界杯参赛球队:西班牙
日期:2010-06-24 17:14:482010年世界杯参赛球队:尼日利亚
日期:2010-03-29 21:25:292010新春纪念徽章
日期:2010-03-01 11:19:072010年世界杯参赛球队:阿根廷
日期:2010-01-27 14:53:342010年世界杯参赛球队:斯洛伐克
日期:2010-01-22 15:04:21生肖徽章2007版:兔
日期:2009-11-11 17:42:152009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:鸡
日期:2009-07-22 08:42:09
发表于 2011-1-28 09:21 | 显示全部楼层
LZ 的这个 应该在 end_dt 上做文章
tph 表的 连接列 的索引用不上的

[ 本帖最后由 txt1124 于 2011-1-28 09:23 编辑 ]

使用道具 举报

回复
论坛徽章:
7
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:猴
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53嫦娥
日期:2008-07-08 11:25:29奥运会纪念徽章:垒球
日期:2008-07-22 23:37:50奥运会纪念徽章:跳水
日期:2008-07-31 22:00:562010新春纪念徽章
日期:2010-01-04 08:33:08
发表于 2011-1-28 10:10 | 显示全部楼层

回复 #22 yyp2009 的帖子

对的,具体情况具体分析,那用IN的话执行计划如何呢?

使用道具 举报

回复
认证徽章
论坛徽章:
58
生肖徽章2007版:马
日期:2009-11-06 23:12:33授权会员
日期:2013-01-10 14:38:592013年新春福章
日期:2013-02-25 14:51:24马自达
日期:2013-08-07 10:54:45红旗
日期:2013-08-09 13:48:48劳斯莱斯
日期:2013-09-12 15:56:37萤石
日期:2013-10-31 08:44:19优秀写手
日期:2013-12-18 09:29:13Jeep
日期:2014-01-14 10:53:432014年新春福章
日期:2014-02-18 16:43:09
发表于 2011-1-28 10:13 | 显示全部楼层
我这里用in更糟的

使用道具 举报

回复
论坛徽章:
7
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:猴
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53嫦娥
日期:2008-07-08 11:25:29奥运会纪念徽章:垒球
日期:2008-07-22 23:37:50奥运会纪念徽章:跳水
日期:2008-07-31 22:00:562010新春纪念徽章
日期:2010-01-04 08:33:08
发表于 2011-1-28 10:38 | 显示全部楼层

回复 #25 yyp2009 的帖子

那你觉得原因是什么呢?**因子?

使用道具 举报

回复
认证徽章
论坛徽章:
58
生肖徽章2007版:马
日期:2009-11-06 23:12:33授权会员
日期:2013-01-10 14:38:592013年新春福章
日期:2013-02-25 14:51:24马自达
日期:2013-08-07 10:54:45红旗
日期:2013-08-09 13:48:48劳斯莱斯
日期:2013-09-12 15:56:37萤石
日期:2013-10-31 08:44:19优秀写手
日期:2013-12-18 09:29:13Jeep
日期:2014-01-14 10:53:432014年新春福章
日期:2014-02-18 16:43:09
发表于 2011-1-28 11:30 | 显示全部楼层
聚簇因子确实很高的

使用道具 举报

回复
论坛徽章:
5
2011新春纪念徽章
日期:2011-02-18 11:43:34ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:482013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:11
发表于 2011-2-11 15:34 | 显示全部楼层
首先tph上与end_dt相关联的索引IDX_MAIN_ASSET_END_DT 的选择性太弱,当条件为end_dt = '30001231'时,优化器估算其基数为:
86047354/874 = 98452,COST相应较高,所以优化器没有选择INDEX RANGE SCNA,当然也就没有采用NEST LOOP来完成两表的关联,而采用
HASH JOIN。
tph表的IDX_MAIN_ASSET_END_DT索引:

DISTINCT_KEYS CLUSTERING_FACTOR   NUM_ROWS
------------- ----------------- ----------
          874          28999384   86047354

使用道具 举报

回复
论坛徽章:
5
2011新春纪念徽章
日期:2011-02-18 11:43:34ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:482013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:11
发表于 2011-2-11 15:38 | 显示全部楼层
tph的asset_row_id字段上的索引走不了主要是因为两张表的连接方式造成的,如果采用NEST LOOP,应该会走索引

使用道具 举报

回复

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

本版积分规则 发表回复

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