Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

23

积分

0

好友

6

主题
1#
发表于 2013-4-18 10:48:24 | 查看: 4025| 回复: 5
本帖最后由 vincent 于 2013-4-18 10:51 编辑
  1. select a.patient_name           as "Bill#PatientName",
  2.        a.patient_sex,
  3.        a.PATIENT_ID             "Bill#PatientId",
  4.        a.HOSPITAL_ID            as "Bill#HospitalID",
  5.        a.HOSPITAL_NAME          as "Bill#HospitalName",
  6.        a.ADMISSION_DATE         as "Bill#AdmissonDate",
  7.        a.BILLDATE               as "Bill#BillDate",
  8.        a.bill_no                as "Bill#BillCode",
  9.        a.ADMISSION_DISEASE_NAME as "Bill#AdmissionDiseaseName",
  10.        a.DISCHARGE_DISEASE_NAME as "Bill#DischargeDiseaseName",
  11.        b.ELIGIBLE_AMOUNT,
  12.        b.Hospital_Remark,
  13.        b.ITEM_DATE,
  14.        b.ITEM_ID,
  15.        b.ITEM_NAME,
  16.        b.NUMBERS,
  17.        b.PRICE,
  18.        b.COSTS,
  19.        b.DRUG_SPEC,
  20.        b.PACKAGE_UNIT,
  21.        b.physician_name,
  22.        b.deptname,
  23.        b.REJECT_MONEY,
  24.        b.REJECT_RESON,
  25.        b.OPER_USER_NAME,
  26.        b.OPER_DATE,
  27.        c.rules                  as "CheckRule#RuleName",
  28.        c.reason                 as "AuditResult#Reason"
  29.   from DW_BillDetail b
  30. inner join DW_Bill a
  31.     on b.pid = a.hisid
  32. inner join (select aa.detail_id,
  33.                     wm_concat(aa.reason) reason,
  34.                     wm_concat(bb.rule_name) rules
  35.                from ad_auditresult aa
  36.               inner join gz_list bb
  37.                  on aa.rule_code = bb.id
  38.               inner join dw_bill cc
  39.                  on aa.claim_id = cc.id
  40.               where aa.detail_id <> '0'
  41.                 and cc.TABLE_PAR >= '20130101'
  42.                 and cc.TABLE_PAR < '20130418'
  43.                 and cc.ANDIT_MANU_STATUS in ('0', '1', '2', '9')
  44.                 and cc.HOSPITAL_ID = '1002'
  45.               group by aa.detail_id) c
  46.     on b.id = c.detail_id
  47. where b.REJECT_MONEY > 0
  48. order by b.pid, b.ITEM_DATE
复制代码
执行计划
  1. Plan hash value: 3559754870

  2. -----------------------------------------------------------------------------------------------------------------------------------------
  3. | Id  | Operation                                  | Name                       | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
  4. -----------------------------------------------------------------------------------------------------------------------------------------
  5. |   0 | SELECT STATEMENT                           |                            |     1 |  4274 | 41253   (1)| 00:08:16 |       |       |
  6. |   1 |  SORT ORDER BY                             |                            |     1 |  4274 | 41253   (1)| 00:08:16 |       |       |
  7. |   2 |   NESTED LOOPS                             |                            |     1 |  4274 | 41252   (1)| 00:08:16 |       |       |
  8. |   3 |    NESTED LOOPS                            |                            |     1 |  4168 | 41249   (1)| 00:08:15 |       |       |
  9. |   4 |     VIEW                                   |                            |     1 |  4024 | 41247   (1)| 00:08:15 |       |       |
  10. |   5 |      SORT GROUP BY                         |                            |     1 |   148 | 41247   (1)| 00:08:15 |       |       |
  11. |*  6 |       HASH JOIN                            |                            |   835 |   120K| 41246   (1)| 00:08:15 |       |       |
  12. |   7 |        TABLE ACCESS FULL                   | GZ_LIST                    |    39 |   780 |     2   (0)| 00:00:01 |       |       |
  13. |   8 |        NESTED LOOPS                        |                            |       |       |            |          |       |       |
  14. |   9 |         NESTED LOOPS                       |                            |   835 |   104K| 41244   (1)| 00:08:15 |       |       |
  15. |* 10 |          TABLE ACCESS BY GLOBAL INDEX ROWID| DW_BILL                    |   223 |  9589 | 40409   (1)| 00:08:05 | ROWID | ROWID |
  16. |* 11 |           INDEX RANGE SCAN                 | IX_BILL_HOSPITAL_ID        | 71601 |       |   204   (1)| 00:00:03 |       |       |
  17. |* 12 |          INDEX RANGE SCAN                  | IX_AD_AUDITRESULT_CLAIM_ID |     4 |       |     3   (0)| 00:00:01 |       |       |
  18. |* 13 |         TABLE ACCESS BY INDEX ROWID        | AD_AUDITRESULT             |     4 |   340 |     5   (0)| 00:00:01 |       |       |
  19. |* 14 |     TABLE ACCESS BY INDEX ROWID            | DW_BILLDETAIL              |     1 |   144 |     3   (0)| 00:00:01 |       |       |
  20. |* 15 |      INDEX UNIQUE SCAN                     | PK_DW_BILLDETAIL           |     1 |       |     2   (0)| 00:00:01 |       |       |
  21. |  16 |    TABLE ACCESS BY GLOBAL INDEX ROWID      | DW_BILL                    |     1 |   106 |     3   (0)| 00:00:01 | ROWID | ROWID |
  22. |* 17 |     INDEX UNIQUE SCAN                      | PK_DW_BILL                 |     1 |       |     2   (0)| 00:00:01 |       |       |
  23. -----------------------------------------------------------------------------------------------------------------------------------------

  24. Predicate Information (identified by operation id):
  25. ---------------------------------------------------

  26.    6 - access("BB"."ID"=TO_NUMBER("AA"."RULE_CODE"))
  27.   10 - filter("CC"."TABLE_PAR">='20130101' AND ("CC"."ANDIT_MANU_STATUS"='0' OR "CC"."ANDIT_MANU_STATUS"='1' OR
  28.               "CC"."ANDIT_MANU_STATUS"='2' OR "CC"."ANDIT_MANU_STATUS"='9') AND "CC"."TABLE_PAR"<'20130418')
  29.   11 - access("CC"."HOSPITAL_ID"='1002')
  30.   12 - access("AA"."CLAIM_ID"="CC"."ID")
  31.   13 - filter("AA"."DETAIL_ID"<>'0')
  32.   14 - filter("B"."REJECT_MONEY">0)
  33.   15 - access("B"."ID"="C"."DETAIL_ID")
  34.   17 - access("B"."PID"="A"."HISID")
复制代码
GZ_LIST表共39条信息没有建立索引
6#
发表于 2013-4-18 11:14:14
TABLE_PAR 如果是分区键。而且 TABLE_PAR ANDIT_MANU_STATUS HOSPITAL_ID 几个字段常一起使用,那在这几个字段上建一个分区索引看是否可行

回复 只看该作者 道具 举报

5#
发表于 2013-4-18 11:07:45
本帖最后由 dla001 于 2013-4-18 11:11 编辑

这个SQL执行需要多长时间,你期望用多长时间?
内层group by返回数据多少条,用多少时间?
最终返回数据多少,用多长时间?
哪个部分可以大量减少数据?
分区表的分区字段是否能加到查询条件中?
一个一个部分看一下,自己就明白了,这就是个体力活。

回复 只看该作者 道具 举报

4#
发表于 2013-4-18 11:06:38
单从执行计划上看,貌似都没有问题。需要更多的信息来诊断,你也可以对此sql 做个10046

回复 只看该作者 道具 举报

3#
发表于 2013-4-18 11:00:31
分区字段,类型,各表行数

回复 只看该作者 道具 举报

2#
发表于 2013-4-18 10:50:19
DW_BILL较大,按月做的时间分区

回复 只看该作者 道具 举报

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

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 14:56 , Processed in 0.052635 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569