查看: 2427|回复: 6

SQL优化

[复制链接]
招聘 : 数据分析/ETL
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:35ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51
发表于 2011-1-21 17:15 | 显示全部楼层 |阅读模式
请问一下如果SQL语句可以再怎样优化一下吗?该有的索引都有的,但逻辑读还是很大,请各位帮我分析分析,谢谢!
SQL语句如下:
select * from(select rownum rn,f.* from (  select a.*, t6.oppcode productcode,t6.field03 PUNIT,t6.name productname,
t6.spec productspec,t6.orign orign,t6.field04 PPACK,t6.field05 PIMPORT_HOME ,t6.FIELD02 PTYPE,t6.FIELD01 PDOSE,t7.code sendercode,t7.NAME sendername,
t8.code receivercode,t8.NAME receivername
from (select t1.id id,t1.sender_id sender_id,t1.receiver_id receiver_id,
t1.product_id product_id,t1.unit_id unit_id,t1.batchnumber batchnumber,
t1.price price,t1.amount amount,t1.quantity quantity,t1.saledate saledate,
t1.confirmedshipdate confirmedshipdate,t1.sendertype sendertype, t1.province_id provinceid,
t1.city_id cityid,t1.provinder provinder, t1.province provincename,
t1.city city,t1.inputdate inputdate,t1.uploaddate uploaddate,t1.receivertype receivertype,
t1.GY_PRODUCT_CODE,t1.SALE_DEPMENT,t1.SALE_DEPMENT_ID,t1.DUTY_AMOUNT,
t1.EXPIRATIONDATE,t1.PRODUCTDATE,t1.RECEIVER_ADDRESS,t1.CUSTOMER_NAME,t1.CUSTOMER_CODE,t1.CUSTOMER_TYPE,
t1.xszt_id,t1.xszt_name,t1.hz_id,t1.hz_name,t1.field01
from t_iv_salestracking t1, ( select iv_permission org_id from t_manage_iv_permission
where flag = 2 and user_id = 566256) t2, ( select iv_permission product_id from t_manage_iv_permission
where flag = 1 and user_id = 566256) t3 where t1.sender_id = t2.org_id  and t1.product_id = t3.product_id  
and t1.saledate >= to_date('2010-06-01','yyyy-mm-dd hh24:mi:ss')
and t1.saledate <= to_date('2011-01-18','yyyy-mm-dd hh24:mi:ss') ) a,
t_iv_product t6, t_mgt_org t7,  t_mgt_org t8  where  a.product_id = t6.id and a.sender_id = t7.id and a.receiver_id = t8.id order by sender_id desc) f   
where rownum <=24) where rn >= 0


以上SQL的执行计划和统计信息如下:

Execution Plan
----------------------------------------------------------
Plan hash value: 749234649

---------------------------------------------------------------------------------------------------------------------
| Id  | Operation                            | Name                 | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |                      |    24 |   163K|       |  9844   (1)| 00:01:59 |
|*  1 |  VIEW                                |                      |    24 |   163K|       |  9844   (1)| 00:01:59 |
|*  2 |   COUNT STOPKEY                      |                      |       |       |       |            |          |
|   3 |    VIEW                              |                      |   215K|  1428M|       |  9844   (1)| 00:01:59 |
|*  4 |     SORT ORDER BY STOPKEY            |                      |   215K|   101M|       |  9844   (1)| 00:01:59 |
|*  5 |      FILTER                          |                      |       |       |       |            |          |
|*  6 |       HASH JOIN                      |                      |   215K|   101M|       |  9844   (1)| 00:01:59 |
|   7 |        TABLE ACCESS FULL             | T_IV_PRODUCT         |  1986 |   186K|       |    11   (0)| 00:00:01 |
|*  8 |        HASH JOIN                     |                      |   215K|    81M|       |  9828   (1)| 00:01:58 |
|*  9 |         INDEX RANGE SCAN             | IDX_COM1             |  2510 | 37650 |       |    12   (0)| 00:00:01 |
|* 10 |         HASH JOIN                    |                      |   210K|    76M|  3848K|  9812   (1)| 00:01:58 |
|  11 |          TABLE ACCESS FULL           | T_MGT_ORG            | 78688 |  2920K|       |   264   (2)| 00:00:04 |
|* 12 |          HASH JOIN                   |                      |   210K|    69M|  3848K|  5797   (1)| 00:01:10 |
|  13 |           TABLE ACCESS FULL          | T_MGT_ORG            | 78688 |  2920K|       |   264   (2)| 00:00:04 |
|* 14 |           TABLE ACCESS BY INDEX ROWID| T_IV_SALESTRACKING   |   332 | 96612 |       |    72   (0)| 00:00:01 |
|  15 |            NESTED LOOPS              |                      |   210K|    61M|       |  2161   (1)| 00:00:26 |
|* 16 |             INDEX RANGE SCAN         | IDX_COM1             |   636 |  9540 |       |     5   (0)| 00:00:01 |
|* 17 |             INDEX RANGE SCAN         | IDX_SALETRK_PRODUNIT |   114 |       |       |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------------------------

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

   1 - filter("RN">=0)
   2 - filter(ROWNUM<=24)
   4 - filter(ROWNUM<=24)
   5 - filter(TO_DATE('2010-06-01','yyyy-mm-dd hh24:mi:ss')<=TO_DATE('2011-01-18','yyyy-mm-dd hh24:mi:ss'))
   6 - access("T1"."PRODUCT_ID"="T6"."ID")
   8 - access("T1"."SENDER_ID"="IV_PERMISSION")
   9 - access("USER_ID"=566256 AND "FLAG"=2)
  10 - access("T1"."SENDER_ID"="T7"."ID")
  12 - access("T1"."RECEIVER_ID"="T8"."ID")
  14 - filter("T1"."SALEDATE">=TO_DATE('2010-06-01','yyyy-mm-dd hh24:mi:ss') AND
              "T1"."SALEDATE"<=TO_DATE('2011-01-18','yyyy-mm-dd hh24:mi:ss'))
  16 - access("USER_ID"=566256 AND "FLAG"=1)
  17 - access("T1"."PRODUCT_ID"="IV_PERMISSION")


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
     974827  consistent gets
     129983  physical reads
        116  redo size
       7711  bytes sent via SQL*Net to client
        480  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
         24  rows processed
认证徽章
论坛徽章:
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-21 17:23 | 显示全部楼层
首先,我觉得sql中*点多,估计过滤后逻辑读少不了。这些要分别看表大小和过滤条件对应的记录大小了
其次,此表T_MGT_ORG记录有多少,表上id字段code字段和 NAME的索引情况如何?
t1.saledate上改建map索引看看。

使用道具 举报

回复
论坛徽章:
0
发表于 2012-9-26 15:33 | 显示全部楼层

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
10
咸鸭蛋
日期:2012-02-02 15:23:012014年新春福章
日期:2014-02-18 16:44:08福特
日期:2013-12-04 11:24:26ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB社区OCM联盟徽章
日期:2013-03-21 15:35:432013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00咸鸭蛋
日期:2012-04-10 16:49:36蛋疼蛋
日期:2012-04-09 13:30:04马上有对象
日期:2014-02-18 16:44:08
发表于 2012-9-26 16:01 | 显示全部楼层
T_MGT_ORG上面的ID有索引么

使用道具 举报

回复
论坛徽章:
6
ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15复活蛋
日期:2011-12-12 16:28:312012新春纪念徽章
日期:2012-01-04 11:51:22奥运会纪念徽章:篮球
日期:2012-08-03 15:40:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24
发表于 2012-9-26 16:33 | 显示全部楼层
你从20多万笔记录中rownum24笔,逻辑读能不大吗?

使用道具 举报

回复
论坛徽章:
5
2010广州亚运会纪念徽章:跆拳道
日期:2010-11-11 21:47:462010广州亚运会纪念徽章:摔跤
日期:2010-11-11 21:48:06SQL大赛参与纪念
日期:2011-04-13 12:08:17咸鸭蛋
日期:2011-06-02 12:28:03ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20
发表于 2012-9-26 16:55 | 显示全部楼层
本帖最后由 lijingeng 于 2012-9-26 20:59 编辑

2011年的帖子,怎么挖上来了,。。。中招了

使用道具 举报

回复
认证徽章
论坛徽章:
11
2012新春纪念徽章
日期:2012-01-04 11:56:442015年新春福章
日期:2015-03-06 11:58:39暖羊羊
日期:2015-03-04 14:53:002014年新春福章
日期:2014-02-18 16:44:08问答徽章
日期:2014-01-02 15:42:02优秀写手
日期:2013-12-18 09:29:11ITPUB社区12周年站庆徽章
日期:2013-08-20 11:30:112013年新春福章
日期:2013-02-25 14:51:24复活蛋
日期:2013-01-25 13:54:43奥运纪念徽章
日期:2012-12-06 09:21:40
发表于 2013-6-7 14:53 | 显示全部楼层
楼主也不回复   难怪沉了

使用道具 举报

回复

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

本版积分规则 发表回复

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