查看: 2267|回复: 6

sql 优化的问题。

[复制链接]
论坛徽章:
0
发表于 2010-3-24 16:40 | 显示全部楼层 |阅读模式
select stat from stu_report where stu_id in (select stu_id from stu_n_hist where linkid in (select linkid from stu_m_hist where src_id in ('34543','43535','53535') and arrived_time >= to_date('2009-09-22 00:00:00','yyyy-mm-dd hh24:mi:ss')));


这样的语句在数据库没有任何外部连接负担的情况下,半天(>20分钟)都出不来,难道也是写法有问题?如果是怎么优化?

该语句在执行中的时候系统性能:
[root@ora ~]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  1    316  17120  98972 6977692    0    0    13    29    0    0  0  0 100  0  0
0  1    316  14248  98860 6980868    0    0  3132     0  624  910  0  0 94  6  0
0  1    316  16228  98708 6978916    0    0  2296   142  518  744  0  0 94  6  0
0  1    316  14252  98704 6980952    0    0  2748    42  569  828  0  0 94  6  0
0  1    316  15276  98636 6980212    0    0  2884    24  582  861  0  0 94  6  0
0  1    316  14080  98544 6981684    0    0  2300   104  506  723  0  0 94  6  0
0  1    316  15460  98228 6980600    0    0  2624    24  551  795  0  0 94  5  0
0  1    316  17140  97940 6979184    0    0  2508    14  531  758  1  0 94  5  0
1  0    316  15460  97392 6981572    0    0  4184    24  744 1193  0  0 94  6  0
0  1    316  16484  97228 6980560    0    0  2868    24  579  875  0  0 94  6  0

Ctrl+c 停止后,系统的性能:
[root@ora1 ~]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0    316 116184  96552 6984000    0    0    13    29    0    0  0  0 100  0  0
0  0    316 116184  96552 6984008    0    0     0    24  146  138  0  0 100  0  0
0  0    316 116184  96552 6984008    0    0     0    24  144  137  0  0 100  0  0
0  0    316 116184  96568 6983992    0    0     0    20  132  130  0  0 100  0  0
0  0    316 116184  96568 6984008    0    0     0    24  135  142  0  0 100  0  0


后面的子句可以看到执行计划:

SQL>select stu_id from stu_n_hist where linkid in (select linkid from stu_m_hist where src_id in ('34543','43535','53535') and arrived_time >= to_date('2009-09-22 00:00:00','yyyy-mm-dd hh24:mi:ss'))

........
........
Execution Plan
----------------------------------------------------------

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

| Id  | Operation                     | Name                       | Rows  | Bytes |
Cost (%CPU)|

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

|   0 | SELECT STATEMENT             |                               |   219K|    16M|
88682         (2)|

|*  1 |  HASH JOIN RIGHT SEMI             |                               |   219K|    16M|
88682         (2)|

|*  2 |   TABLE ACCESS BY INDEX ROWID| stu_m_hist               |     1 |    40 |
    96         (0)|

|*  3 |    INDEX SKIP SCAN             | IDX_stu_m_hist_DEST_ID |     1 |       |
    95         (0)|

|*  4 |   TABLE ACCESS FULL             | stu_n_hist               |  6493K|   235M|
88510         (1)|

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


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

   1 - access("LINKID"="LINKID")
   2 - filter(("src_id"='34543' OR "src_id"='43535' OR
              "src_id"='53535') AND "LINKID" IS NOT NULL)
   3 - access("ARRIVED_TIME">=TO_DATE(' 2010-03-22 00:00:00', 'syyyy-mm-dd
              hh24:mi:ss'))
       filter("ARRIVED_TIME">=TO_DATE(' 2010-03-22 00:00:00', 'syyyy-mm-dd
              hh24:mi:ss'))
   4 - filter("LINKID" IS NOT NULL)

Note
-----
   - 'PLAN_TABLE' is old version


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
     399963  consistent gets
     241664  physical reads
       1708  redo size
       2354  bytes sent via SQL*Net to client
        525  bytes received via SQL*Net from client
          5  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         59  rows processed

SQL>

[ 本帖最后由 echo52 于 2010-3-24 17:34 编辑 ]
论坛徽章:
3
生肖徽章2007版:马
日期:2009-10-15 18:59:57生肖徽章2007版:鸡
日期:2009-11-16 18:45:312010新春纪念徽章
日期:2010-03-01 11:08:29
发表于 2010-3-24 16:41 | 显示全部楼层
看看执行计划?

使用道具 举报

回复
论坛徽章:
3
鲜花蛋
日期:2011-07-05 17:12:112012新春纪念徽章
日期:2012-01-04 11:54:46优秀写手
日期:2013-12-18 09:29:13
发表于 2010-3-24 16:53 | 显示全部楼层
好多IN,数据多少,看下执行计划

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2010-3-24 17:18 | 显示全部楼层
半天出不来,看不到执行计划。

使用道具 举报

回复
论坛徽章:
8
2010新春纪念徽章
日期:2010-03-01 11:08:26ITPUB9周年纪念徽章
日期:2010-10-08 09:32:272011新春纪念徽章
日期:2011-02-18 11:43:33奥运会纪念徽章:棒球
日期:2012-07-03 15:20:13奥运会纪念徽章:摔跤
日期:2012-07-22 21:22:28ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:48紫蛋头
日期:2013-02-20 09:40:232013年新春福章
日期:2013-02-25 14:51:24
发表于 2010-3-24 17:31 | 显示全部楼层
select distinct stu_report.stat from stu_report, stu_n_hist, stu_m_hist
where stu_n_hist.linkid = stu_m_hist.linkid
and stu_n_hist.stu_id = stu_report.stu_id
and stu_m_hist.src_id in ('34543','43535','53535')
and stu_m_hist.arrived_time >= to_date('2009-09-22','yyyy-mm-dd');

试试这个

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2010-3-24 18:02 | 显示全部楼层
原帖由 myttsd 于 2010-3-24 17:31 发表
select distinct stu_report.stat from stu_report, stu_n_hist, stu_m_hist
where stu_n_hist.linkid = stu_m_hist.linkid
and stu_n_hist.stu_id = stu_report.stu_id
and stu_m_hist.src_id in ('34543','43535','53535')
and stu_m_hist.arrived_time >= to_date('2009-09-22','yyyy-mm-dd');

试试这个

。。。。。。
一样,出不来

使用道具 举报

回复
论坛徽章:
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
发表于 2010-3-24 18:10 | 显示全部楼层
stu_n_hist表的linkid上加个索引

使用道具 举报

回复

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

本版积分规则 发表回复

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