大表全表扫描,SQL查询效率低下

一用户进入某界面慢得要死,查看SQL执行计划如下(具体SQL语句就不完全公布了,截断的如下):



call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      9.48      97.10       4222     163337          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      9.48      97.10       4222     163337          0           0

Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 31  
Number of plan statistics captured: 1

Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         0          0          0  SORT ORDER BY (cr=163337 pr=4222 pw=0 time=97103852 us)
         0          0          0   HASH GROUP BY (cr=163337 pr=4222 pw=0 time=97103834 us)
         0          0          0    NESTED LOOPS  (cr=163337 pr=4222 pw=0 time=97103700 us)
         0          0          0     NESTED LOOPS  (cr=163337 pr=4222 pw=0 time=97103697 us)
         6          6          6      NESTED LOOPS  (cr=163300 pr=4222 pw=0 time=100235764 us)
       373        373        373       FILTER  (cr=163298 pr=4222 pw=0 time=159317332 us)
       373        373        373        HASH JOIN RIGHT OUTER (cr=163298 pr=4222 pw=0 time=92520264 us)
       608        608        608         TABLE ACCESS FULL 病历文件列表 (cr=23 pr=0 pw=0 time=51 us)
       373        373        373         TABLE ACCESS FULL 电子病历记录 (cr=163275 pr=4222 pw=0 time=92510188 us)
         6          6          6       INDEX UNIQUE SCAN 病区科室对应_PK (cr=2 pr=0 pw=0 time=1713 us)(object id 19144)
         0          0          0      TABLE ACCESS BY INDEX ROWID 病人变动记录 (cr=37 pr=0 pw=0 time=478 us)
        23         23         23       INDEX RANGE SCAN 病人变动记录_IX_病人ID (cr=15 pr=0 pw=0 time=128 us)(object id 19148)
         0          0          0     TABLE ACCESS BY INDEX ROWID 病人信息 (cr=0 pr=0 pw=0 time=0 us)
         0          0          0      INDEX UNIQUE SCAN 病人信息_PK (cr=0 pr=0 pw=0 time=0 us)(object id 19355)

可以清楚的看到,2个表全表扫描,而且电子病历记录是一张大表,记录数据接近千万,这样查询要死人的,查看谓语条件,电子病历记录表有“完成时间>=Trunc(Sysdate-(:V001-1))”,如果用到该字段的索引,肯定能够提升查询的性能,最后调整后的执行计划如下:


分分钟查询结果出来,问题解决。


转载请注明出处,否则追究责任


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值