查看: 5880|回复: 17

困惑的优化问题

[复制链接]
认证徽章
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
发表于 2009-11-13 15:42 | 显示全部楼层 |阅读模式
遇到一个SQL的优化问题
select substr(s.stdcode, 4,6) val,
               substr(s.stdcode,4) stdcode,
               S.STDNAME,
               h.billtag,
               h.JianZMJ  jzmj,
               h.qty,
               h.OrgnValue jz,
               h.TuDMJ tdmj
from  h
inner join  s  on h.orgguid = s.g_id
where h.weicz=1 and h.isscrap=0
order by s.stdcode

h 表中有87万条数据  s 表 中有477条数据。h.weicz and h.isscrap有位图索引。s.g_id,h.orgguid
s.stdcode
也有索引。

执行计划
----------------------------------------------------------
Plan hash value: 3044332512

----------------------------------------------------------------------------------------------------
| Id  | Operation                      | Name                     | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT               |                          |   846K|   233M|       | 52973   (1)| 00:10:36 |
|   1 |  SORT ORDER BY                 |                             |   846K|   233M|   508M| 52973   (1)| 00:10:36 |
|*  2 |   HASH JOIN                     |                                |   846K|   233M|       |   145  (12)| 00:00:02 |
|   3 |    TABLE ACCESS FULL           | s                        |   477 | 84906 |       |     9   (0)| 00:00:01 |
|   4 |    TABLE ACCESS BY INDEX ROWID | H               |   846K|    90M|       |   120   (1)| 00:00:
|   5 |     BITMAP CONVERSION TO ROWIDS|                          |       |       |       |            |          |
|   6 |      BITMAP AND                |                          |       |       |       |            |          |
|*  7 |       BITMAP INDEX SINGLE VALUE| GD_ASSETCARD_H_INDEX3    |       |       |       |            |          |
|*  8 |       BITMAP INDEX SINGLE VALUE| GD_ASSETCARD_H_WEI_INDEX |       |       |       |            |          |
----------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("H"."ORGGUID"="S"."G_ID")
   7 - access("H"."ISSCRAP"=0)
   8 - access("H"."WEICZ"=1)

Note
-----
   - 'PLAN_TABLE' is old version
   - dynamic sampling used for this statement


统计信息
----------------------------------------------------------
         73  recursive calls
          5  db block gets
     107026  consistent gets
      80422  physical reads
          0  redo size
   12374135  bytes sent via SQL*Net to client
     628111  bytes received via SQL*Net from client
      57068  SQL*Net roundtrips to/from client
          2  sorts (memory)
          1  sorts (disk)
     855991  rows processed


请教如何优化?
认证徽章
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
发表于 2009-11-13 15:46 | 显示全部楼层
逻辑读和物理读太大

使用道具 举报

回复
论坛徽章:
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-11-13 15:58 | 显示全部楼层
select /*+ use_hash(h,s) full(h) leading(s) */ substr(s.stdcode, 4,6) val,
               substr(s.stdcode,4) stdcode,
               S.STDNAME,
               h.billtag,
               h.JianZMJ  jzmj,
               h.qty,
               h.OrgnValue jz,
               h.TuDMJ tdmj
from  h
inner join  s  on h.orgguid = s.g_id
where h.weicz=1 and h.isscrap=0
order by s.stdcode

试试

使用道具 举报

回复
论坛徽章:
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-11-13 15:59 | 显示全部楼层
有一点就是你这个结果查出来后做什么

使用道具 举报

回复
认证徽章
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
发表于 2009-11-13 16:10 | 显示全部楼层
要根据stdcode 做单位的信息汇总,应用程序会出现汇总表



原帖由 棉花糖ONE 于 2009-11-13 15:59 发表
有一点就是你这个结果查出来后做什么

使用道具 举报

回复
认证徽章
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
发表于 2009-11-13 16:13 | 显示全部楼层
执行计划
----------------------------------------------------------
Plan hash value: 2931813723

----------------------------------------------------------------------------------------------
| Id  | Operation           | Name           | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |                |   846K|   233M|       | 77466   (2)| 00:15:30 |
|   1 |  SORT ORDER BY      |                |   846K|   233M|   508M| 77466   (2)| 00:15:30 |
|*  2 |   HASH JOIN         |                |   846K|   233M|       | 24637   (4)| 00:04:56 |
|   3 |    TABLE ACCESS FULL| S|   477 | 84906 |       |     9   (0)| 00:00:01 |
|*  4 |    TABLE ACCESS FULL| H |   846K|    90M|       | 24612   (4)| 00:04:56 |
----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("H"."ORGGUID"="S"."G_ID")
   4 - filter("H"."WEICZ"=1 AND "H"."ISSCRAP"=0)

Note
-----
   - 'PLAN_TABLE' is old version
   - dynamic sampling used for this statement


统计信息
----------------------------------------------------------
         73  recursive calls
          5  db block gets
     108964  consistent gets
      76755  physical reads
          0  redo size
   12374135  bytes sent via SQL*Net to client
     628111  bytes received via SQL*Net from client
      57068  SQL*Net roundtrips to/from client
          2  sorts (memory)
          1  sorts (disk)
     855991  rows processed



原帖由 棉花糖ONE 于 2009-11-13 15:58 发表
select /*+ use_hash(h,s) full(h) leading(s) */ substr(s.stdcode, 4,6) val,
               substr(s.stdcode,4) stdcode,
               S.STDNAME,
               h.billtag,
               h.JianZMJ  jzmj,
               h.qty,
               h.OrgnValue jz,
               h.TuDMJ tdmj
from  h
inner join  s  on h.orgguid = s.g_id
where h.weicz=1 and h.isscrap=0
order by s.stdcode

试试

使用道具 举报

回复
论坛徽章:
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-11-13 16:15 | 显示全部楼层
不能用sql直接汇总吗,还要把结果都查到前台再做汇总

使用道具 举报

回复
认证徽章
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
发表于 2009-11-13 16:24 | 显示全部楼层
前端的信息是用字段映射,进行报表展现。最好能优化一下这个SQL语句。

原帖由 棉花糖ONE 于 2009-11-13 16:15 发表
不能用sql直接汇总吗,还要把结果都查到前台再做汇总

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
9
生肖徽章2007版:牛
日期:2009-03-10 21:26:492010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:葡萄牙
日期:2010-02-22 14:35:242010新春纪念徽章
日期:2010-03-01 11:19:092010广州亚运会纪念徽章:射击
日期:2010-09-08 23:42:12ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212010广州亚运会纪念徽章:拳击
日期:2010-10-30 00:46:582011新春纪念徽章
日期:2011-02-18 11:43:322011新春纪念徽章
日期:2011-03-01 08:49:39
发表于 2009-11-13 17:28 | 显示全部楼层
比较头痛,可否尝试调大排序区呢?

[ 本帖最后由 killkill_shadow 于 2009-11-13 17:34 编辑 ]

使用道具 举报

回复
论坛徽章:
3
双黄蛋
日期:2012-03-30 22:50:52蛋疼蛋
日期:2012-05-28 16:10:42奥运会纪念徽章:击剑
日期:2012-09-12 22:28:45
发表于 2012-5-21 16:50 | 显示全部楼层
这个还有后话吗?楼主

使用道具 举报

回复

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

本版积分规则 发表回复

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