查看: 10598|回复: 30

[性能调整] sql 的优化? first row? min/max ?

[复制链接]
论坛徽章:
188
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
发表于 2010-5-17 10:35 | 显示全部楼层 |阅读模式
sql 的优化? first row? min/max ?

索引都是
CREATE INDEX scott.I_KA02_ALL_AAE036 ON scott.KA02_ALL
(AAE100, AAE036, AAE030, AAE031) ;


语句如下:
SELECT TO_DATE (MAX (aae036), 'yyyy-mm-dd hh24:mi:ss')
  FROM "KA02_ALL"
WHERE "AAE030" <= TO_CHAR (SYSDATE, 'YYYYMMDDHHMISS')
   AND ("AAE031" >= TO_CHAR (SYSDATE, 'YYYYMMDDHHMISS') OR aae031 IS NULL)
   AND (aae100 = '1');


9.2.0.8 for windows:
执行计划如下(snap1.jpg):


11g for linux:
执行计划如下(snap2.jpg):


有什么办法在9i下实现11g的执行计划?

谢谢!
snap1.jpg
snap2.jpg
论坛徽章:
188
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
 楼主| 发表于 2010-5-17 10:42 | 显示全部楼层
表中基本都是aae001='1'的值.

SELECT   aae100, COUNT (*)
    FROM ka02_all
GROUP BY aae100

AAE   COUNT(*)
--- ----------
0          240
1        33085

2 rows selected.

我的想法是这样,检索aae001='1'的aae036 的最大值,然后确定是否满足
"AAE030" <= TO_CHAR (SYSDATE, 'YYYYMMDDHHMISS')
   AND ("AAE031" >= TO_CHAR (SYSDATE, 'YYYYMMDDHHMISS') OR aae031 IS NULL)
这个条件. 如果不满足,在取下一个aae036的值.

但是在9i下如何实现?是否能够修改统计来实现?
能使用hint吗?

[ 本帖最后由 lfree 于 2010-5-17 11:40 编辑 ]

使用道具 举报

回复
论坛徽章:
3
2009日食纪念
日期:2009-07-22 09:30:002010年世界杯参赛球队:法国
日期:2010-05-11 10:38:442010广州亚运会纪念徽章:高尔夫球
日期:2011-05-04 11:20:40
发表于 2010-5-17 11:05 | 显示全部楼层
手头没有环境,没法测,关注中

使用道具 举报

回复
论坛徽章:
188
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
 楼主| 发表于 2010-5-17 11:22 | 显示全部楼层
原帖由 meshada 于 2010-5-17 11:05 发表
手头没有环境,没法测,关注中


如果你想测试,我可以提供数据.

使用道具 举报

回复
论坛徽章:
4
2010年世界杯参赛球队:斯洛文尼亚
日期:2010-06-14 21:23:25ITPUB9周年纪念徽章
日期:2010-10-08 09:34:02数据库板块每日发贴之星
日期:2010-11-23 01:01:022010广州亚运会纪念徽章:网球
日期:2010-12-03 16:57:20
发表于 2010-5-17 11:26 | 显示全部楼层
LZ用的是sqltools吧?
具体的内容我不太懂...Sorry

使用道具 举报

回复
论坛徽章:
188
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
 楼主| 发表于 2010-5-17 11:40 | 显示全部楼层
原帖由 Solomon-Yin 于 2010-5-17 11:26 发表
LZ用的是sqltools吧?
具体的内容我不太懂...Sorry

不是,我使用蛤蟆.

我就是想让执行计划像11g那样实现.

使用道具 举报

回复
论坛徽章:
311
行业板块每日发贴之星
日期: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
发表于 2010-5-17 11:45 | 显示全部楼层
原帖由 lfree 于 2010-5-17 10:42 发表
表中基本都是aae001='1'的值.

SELECT   aae100, COUNT (*)
    FROM ka02_all
GROUP BY aae100

AAE   COUNT(*)
--- ----------
0          240
1        33085

2 rows selected.

我的想法是这样,检索aae001='1'的aae036 的最大值,然后确定是否满足
"AAE030" = TO_CHAR (SYSDATE, 'YYYYMMDDHHMISS') OR aae031 IS NULL)
这个条件. 如果不满足,在取下一个aae036的值.

但是在9i下如何实现?是否能够修改统计来实现?
能使用hint吗?


我觉得CBO应该像你这般思考操作,你尝试一下这两方法:
1  使用INDEX HINT,看看能否让CBO选择INDEX RANG SCAN,而非INDEX_FFS
2  重新采集索引的第1,2个字段的柱状图统计信息。

使用道具 举报

回复
招聘 : 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
发表于 2010-5-17 11:50 | 显示全部楼层
9i没试过,10G应该是可以的

可以改写成hint index desc scan 然后取第一行的方式

使用道具 举报

回复
论坛徽章:
188
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
 楼主| 发表于 2010-5-17 11:59 | 显示全部楼层
原帖由 ZALBB 于 2010-5-17 11:45 发表


我觉得CBO应该像你这般思考操作,你尝试一下这两方法:
1  使用INDEX HINT,看看能否让CBO选择INDEX RANG SCAN,而非INDEX_FFS
2  重新采集索引的第1,2个字段的柱状图统计信息。


我使用过提示. 可以使用INDEX RANG SCAN.
但是最理想的是11g下,我测试10g,也可以实现像11g的效果.

使用道具 举报

回复
论坛徽章:
188
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
 楼主| 发表于 2010-5-17 12:03 | 显示全部楼层
原帖由 anlinew 于 2010-5-17 11:50 发表
9i没试过,10G应该是可以的

可以改写成hint index desc scan 然后取第一行的方式

不行.


提供测试数据

TEST1.rar

12.16 KB, 下载次数: 16

使用道具 举报

回复

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

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

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