查看: 3426|回复: 13

[性能调整] 怎么优化下面的语句??

[复制链接]
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
发表于 2010-4-12 10:10 | 显示全部楼层 |阅读模式
select max(A.end_no) from barcode_1.print_hist A,barcode_1.COMBO_ITEM_LIST B
where B.cust_BRCD_FMT_id='I8' and  a.barcode like 'SP_________'  
and  a.barcode like '____AC7A___' and (prod_type='N' or Prod_Type='1')  
and A.COMBO_ID=B.COMBO_ID and to_char(A.out_date,'MM/DD')='04/12'
招聘 : 数据库管理员
认证徽章
论坛徽章:
20
祖国60周年纪念徽章
日期:2009-10-09 08:28:00数据库板块每日发贴之星
日期:2011-02-20 01:01:01ITPUB季度 技术新星
日期:2011-04-02 10:31:09ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:54:26玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:242011新春纪念徽章
日期:2011-02-18 11:43:33
发表于 2010-4-12 10:31 | 显示全部楼层
先看下执行计划

使用道具 举报

回复
论坛徽章:
5
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442010新春纪念徽章
日期:2010-03-01 11:19:06ITPUB9周年纪念徽章
日期:2010-10-08 09:32:252011新春纪念徽章
日期:2011-02-18 11:43:34ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2010-4-12 10:48 | 显示全部楼层
缺少信息,无法判断,
那些字段有索引,选择率如何,是否收集了统计信息,什么版本

使用道具 举报

回复
论坛徽章:
59
狮子座
日期:2016-03-26 13:35:402013年新春福章
日期:2013-02-25 14:51:24双黄蛋
日期:2013-02-25 11:06:15ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20灰彻蛋
日期:2012-04-25 13:19:33紫蛋头
日期:2012-03-14 11:16:09最佳人气徽章
日期:2012-03-13 17:39:18玉石琵琶
日期:2012-02-21 15:04:38鲜花蛋
日期:2011-11-30 14:13:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2010-4-12 10:57 | 显示全部楼层
a.barcode like 'SP_________'  and  a.barcode like '____AC7A___'
是不是等价于
a.barcode like 'SP__AC7A___'

使用道具 举报

回复
论坛徽章:
3
九尾狐狸
日期:2006-04-12 17:47:49ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2010-4-12 11:20 | 显示全部楼层
select max(A.end_no) from barcode_1.print_hist A,barcode_1.COMBO_ITEM_LIST B
where B.cust_BRCD_FMT_id='I8' and  a.barcode like 'SP_________'  
and  a.barcode like '____AC7A___' and (prod_type='N' or Prod_Type='1')  
and A.COMBO_ID=B.COMBO_ID and to_char(A.out_date,'MM/DD')='04/12'

like 不跟% 为什么不换成= ?
如果把A.COMBO_ID=B.COMBO_ID去掉,看单边性能如何?
-- try below query:

select max(A.end_no) from barcode_1.print_hist A
where B.cust_BRCD_FMT_id='I8' and  a.barcode like 'SP%AC7A%'  
and (prod_type='N' or Prod_Type='1')  
and to_char(A.out_date,'MM/DD')='04/12'

使用道具 举报

回复
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
 楼主| 发表于 2010-4-12 11:23 | 显示全部楼层
执行计划:


SQL> select max(A.end_no) from barcode_1.print_hist A,barcode_1.COMBO_ITEM_LIST
B
  2  where B.cust_BRCD_FMT_id='I8' and  a.barcode like 'SP_________'
  3  and  a.barcode like '____AC7A___' and (prod_type='N' or Prod_Type='1')
  4  and A.COMBO_ID=B.COMBO_ID and to_char(A.out_date,'MM/DD')='04/12';


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2047 Card=1 Bytes=44
          )

   1    0   SORT (AGGREGATE)
   2    1     NESTED LOOPS (Cost=2047 Card=6 Bytes=264)
   3    2       TABLE ACCESS (FULL) OF 'PRINT_HIST' (Cost=2041 Card=6
          Bytes=222)

   4    2       TABLE ACCESS (BY INDEX ROWID) OF 'COMBO_ITEM_LIST' (Co
          st=1 Card=1 Bytes=7)

   5    4         INDEX (UNIQUE SCAN) OF 'SYS_C007628' (UNIQUE)




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

使用道具 举报

回复
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
 楼主| 发表于 2010-4-12 11:32 | 显示全部楼层

回复 #4 bluemoon0083 的帖子

等价的,不过性能没有改变。

使用道具 举报

回复
论坛徽章:
22
2010新春纪念徽章
日期:2010-03-01 11:08:33马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:09
发表于 2010-4-12 11:50 | 显示全部楼层
1. print_hist 表是否有分区,是否有下面两个相关字段的索引, 如果有选择性如何?
and A.COMBO_ID=B.COMBO_ID
and to_char(A.out_date,'MM/DD')='04/12'

2. out_date是取每年这个日期的数据吗? 还是只是取某一年啊? 如果只是取某一年,最好改成out_date >= xx and out_date< xxx

使用道具 举报

回复
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
 楼主| 发表于 2010-4-12 11:59 | 显示全部楼层

回复 #8 jametong 的帖子

1)有索引列
and A.COMBO_ID=B.COMBO_ID
and to_char(A.out_date,'MM/DD')='04/12'

2)我找开发谈一下,看日期的要求如何.

使用道具 举报

回复
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
 楼主| 发表于 2010-4-12 12:39 | 显示全部楼层

回复 #8 jametong 的帖子

谢谢jametong,按时间段查询后,consistent gets降了很多。


SQL> select max(A.end_no) from barcode_1.print_hist A,barcode_1.COMBO_ITEM_LIST
B
  2  where a.barcode like 'SP_________' and B.cust_BRCD_FMT_id='I8'
  3  and  a.barcode like '____AC7A___' and (prod_type='N' or Prod_Type='1')
  4  and A.COMBO_ID=B.COMBO_ID and
  5  a.out_date>=to_date('04/12','MM/DD') and a.out_date<to_date('04/13','MM/DD'
);


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=1 Bytes=44)
   1    0   SORT (AGGREGATE)
   2    1     FILTER
   3    2       NESTED LOOPS (Cost=4 Card=1 Bytes=44)
   4    3         TABLE ACCESS (BY INDEX ROWID) OF 'PRINT_HIST' (Cost=
          3 Card=1 Bytes=37)

   5    4           INDEX (RANGE SCAN) OF 'IDX_PRINT_HIST_OUT_TIME' (N
          ON-UNIQUE) (Cost=2 Card=24)

   6    3         TABLE ACCESS (BY INDEX ROWID) OF 'COMBO_ITEM_LIST' (
          Cost=1 Card=1 Bytes=7)

   7    6           INDEX (UNIQUE SCAN) OF 'SYS_C007628' (UNIQUE)




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

使用道具 举报

回复

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

本版积分规则 发表回复

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号
  
快速回复 返回顶部 返回列表