查看: 2012|回复: 5

[性能调整] 这个sql 如何优化(结帖)

[复制链接]
论坛徽章:
101
生肖徽章:猴
日期:2007-09-26 12:35:50复活蛋
日期:2011-07-08 14:26:172010广州亚运会纪念徽章:手球
日期:2011-05-09 10:15:122010广州亚运会纪念徽章:排球
日期:2011-04-13 11:57:232011新春纪念徽章
日期:2011-02-18 11:43:332010广州亚运会纪念徽章:射箭
日期:2011-01-21 14:58:57ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522010广州亚运会纪念徽章:自行车
日期:2010-09-17 10:43:02铁扇公主
日期:2010-07-28 08:46:33ITPUB元老
日期:2009-05-12 13:23:24
发表于 2009-8-28 10:00 | 显示全部楼层 |阅读模式
先在开发版发了一个贴子, http://www.itpub.net/thread-1209238-1-1.html , 执行计划和用过的办法都在里面, 为了快点解决,来这里也发一个,请各位大师帮忙看下

select *
  from (select row_.*, rownum rownum_
          from (select t.log_cpdata_id,
                       t.collect_value,
                       t.collect_time,
                        po.org_name as parent_org_name,
                        o.org_name,
                       cp.mine_id,
                       cp.checkpoint_id,
                       cp.checkpoint_name,
                       ct.cptype_name
                  from log_cp_cpdata t
                  left join cp_checkpoint cp on t.checkpoint_id =
                                                cp.checkpoint_id
                  left join code_cp_cptype ct on cp.cptype_id = ct.cptype_id
                  left join cp_mine m on cp.mine_id = m.mine_id
                  left join org_org o on m.org_id = o.org_id
                  left join org_org po on o.parent_org_id = po.org_id
                  left join cp_user_mine n on m.mine_id = n.mine_id
                 where n.user_id = '1000'
                   and t.collect_time between
                       to_date('2009-08-01 11:56:40', 'yyyy-MM-dd hh24:mi:ss') and
                       to_date('2009-08-31 11:56:40', 'yyyy-MM-dd hh24:mi:ss')) row_
         where rownum <= 10)
where rownum_ >= 1;



其中log_cp_cpdata表 是一个3亿多行的表,其他几个表都很小

[ 本帖最后由 kingsun631 于 2009-8-28 11:03 编辑 ]
论坛徽章:
3
九尾狐狸
日期:2006-04-12 17:47:49ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2009-8-28 10:30 | 显示全部楼层
---quote:
其中log_cp_cpdata表 是一个3亿多行的表. 当我改变查询日期间隔,比如2月-8月,查询速度很快,1秒左右,不加提示也很快,看执行计划是大表走了索引,但是我时间间隔改为3月以后到8月的,就会很慢,执行计划走全表, 8月1日-8月31的查询也很快.

我的理解如下,对吗?
2-8 月快,走索引 (collect_time列上的索引?)
3-8 月慢,走全表,
8月1日-8月31日快

3-8月范围减少了没有走索引,是你的问题吗?
HASH OUT JOIN驱动表是大表,另外你用的是9i吧?

使用道具 举报

回复
论坛徽章:
136
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14现代
日期:2013-10-02 14:53:59路虎
日期:2013-11-22 12:26:182014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2009-8-28 10:41 | 显示全部楼层
你这语句的需求是什么,要得到什么东西,只会取1-10行的吗,还是这个只是分页里的一部分

使用道具 举报

回复
论坛徽章:
136
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14现代
日期:2013-10-02 14:53:59路虎
日期:2013-11-22 12:26:182014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2009-8-28 10:42 | 显示全部楼层
有必要left join吗???

使用道具 举报

回复
论坛徽章:
3
九尾狐狸
日期:2006-04-12 17:47:49ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2009-8-28 10:50 | 显示全部楼层
对这也是我的问题,如果没有排序,都没必要加where rownum<=10.

使用道具 举报

回复
论坛徽章:
101
生肖徽章:猴
日期:2007-09-26 12:35:50复活蛋
日期:2011-07-08 14:26:172010广州亚运会纪念徽章:手球
日期:2011-05-09 10:15:122010广州亚运会纪念徽章:排球
日期:2011-04-13 11:57:232011新春纪念徽章
日期:2011-02-18 11:43:332010广州亚运会纪念徽章:射箭
日期:2011-01-21 14:58:57ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522010广州亚运会纪念徽章:自行车
日期:2010-09-17 10:43:02铁扇公主
日期:2010-07-28 08:46:33ITPUB元老
日期:2009-05-12 13:23:24
 楼主| 发表于 2009-8-28 11:03 | 显示全部楼层
谢谢ls各位,我重做了分区表,目前速度还可以

使用道具 举报

回复

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

本版积分规则 发表回复

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