楼主: dingjun123

[精华] 有关DBLINK操作的语句执行机制及优化方式

[复制链接]
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
51#
 楼主| 发表于 2014-2-17 09:49 | 只看该作者
如果2边都是大数据量处理,那driving_site也几乎用途不大,最好的,就是数据导到本地来做了

使用道具 举报

回复
论坛徽章:
4
奔驰
日期:2013-10-07 17:00:50马上有车
日期:2014-04-08 12:29:05马上有钱
日期:2014-06-12 16:39:162014年世界杯参赛球队:喀麦隆
日期:2014-07-02 11:08:09
52#
发表于 2014-2-17 17:17 | 只看该作者
学习了,大牛

使用道具 举报

回复
论坛徽章:
5
2011新春纪念徽章
日期:2011-02-18 11:42:48ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292012新春纪念徽章
日期:2012-01-04 11:57:36ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:002013年新春福章
日期:2013-02-25 14:51:24
53#
发表于 2014-4-25 08:51 | 只看该作者
dingjun123 发表于 2013-5-6 17:37
大家尽情举例dblink操作的优化啊,我补充补充,

兔哥,我这有条sql 真不知道怎么优化了,用了dblink之后就很慢了
原sql:

select *
  from (select rownum num, temp.*
          from (select  a.fid,
                       a.codenum,
                       a.parentcode,
                       a.remittername,
                       a.remitAccount,
                       a.receiveaddress,
                       a.accountname,
                       a.openbank,
                       a.accountno,
                       a.claimamount,
                       a.reachamountdate,
                       a.remitmethod,
                       b.type             remittype,
                       c.category         amountscategory,
                       a.belregion,
                       a.claimstate,
                       a.turnamountstate,
                       a.claimtime,
                       a.turnamounttime,
                       d.deptname         remitdepart,
                       a.remitaccountdate,
                       a.writeoffstate,
                       a.statementsencode,
                       a.transportinvoice,
                       a.alreadyamount,
                       a.unuseamount,
                       a.remark,
                       f.empname          addperson,
                       a.addtime,
                       g.empname          updateperson,
                       a.totamount,
                       h.empname          claimman,
                       a.status,
                       a.fundCompany,
                       a.recBelong,
                       k.principal,
                       a.updateTime,
                       a.repealState,
                       a.remitdepart      remitDeptCode,
                       a.claimType,
                       s.sname            as supplier,
                       a.payAppForm,
                       cus.fname_l2       as customer,
                       a.supplier         as supplierCode,
                       a.customer         as customerCode,
                       a.transactionId,
                       i.opendate         as recipIssu,
                       j.empname          as recipIssuName,
                       i.deposityno       as recipIssuCode,
                       a.collectiontype   as collectiontype,
                       y.deptname         as playdeptName,
                       a.playdeptname     as playdeptNameCode
                  from t_claim_remittancerecord a
                  left join t_pay_remittype b
                    on a.remittype = b.fid
                  left join t_pay_fundtype c
                    on c.fid = a.amountscategory
                  left join t_org_department d
                    on a.remitdepart = d.finasyscode
                  left join t_org_department y
                    on a.playdeptname = y.finasyscode
                   and y.status = 1
                  left join t_org_employee f
                    on f.empcode = a.addperson
                  left join t_org_department k
                    on f.deptid = k.id
                  left join t_org_employee g
                    on g.empcode = a.updateperson
                  left join t_org_employee h
                    on h.empcode = a.claimman
                  left join t_bd_customer cus
                    on cus.fnumber = a.customer
                  left join V_LMS_SUPPLIER s
                    on s.snumber = a.supplier
                  left join t_deposit_printer i
                    on i.codenum = a.codenum
                  left join t_org_employee j
                    on i.createuser = j.empcode
                 WHERE 1 = 1
                   and a.writeOffState like '%未核销%'
                   and a.reachAmountDate between to_date('2014-01-01','yyyy-mm-dd') and to_date('2014-04-01','yyyy-mm-dd')
                   and a.repealstate != 1
                 order by addTime desc, codeNum) temp) t WHERE t.num<=50 and t.num>0
                 

Plan hash value: 3345438767

--------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                   | Name                     | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                            |                          | 27687 |    99M|       | 23407   (1)| 00:04:41 |
|*  1 |  VIEW                                       |                          | 27687 |    99M|       | 23407   (1)| 00:04:41 |
|   2 |   COUNT                                     |                          |       |       |       |            |          |
|   3 |    VIEW                                     |                          | 27687 |    99M|       | 23407   (1)| 00:04:41 |
|   4 |     SORT ORDER BY                           |                          | 27687 |    20M|    21M| 23407   (1)| 00:04:41 |
|*  5 |      HASH JOIN RIGHT OUTER                  |                          | 27687 |    20M|       | 18829   (1)| 00:03:46 |
|   6 |       TABLE ACCESS FULL                     | T_BD_CUSTOMER            | 27281 |  1012K|       |  1847   (1)| 00:00:23 |
|*  7 |       HASH JOIN RIGHT OUTER                 |                          | 27628 |    19M|       | 16980   (1)| 00:03:24 |
|*  8 |        TABLE ACCESS FULL                    | T_ORG_DEPARTMENT         | 11447 |   413K|       |   137   (1)| 00:00:02 |
|*  9 |        HASH JOIN RIGHT OUTER                |                          | 27628 |    18M|       | 16842   (1)| 00:03:23 |
|* 10 |         TABLE ACCESS FULL                   | T_ORG_DEPARTMENT         | 10843 |   423K|       |   137   (1)| 00:00:02 |
|* 11 |         HASH JOIN RIGHT OUTER               |                          | 27628 |    17M|       | 16704   (1)| 00:03:21 |
|  12 |          VIEW                               | index$_join$_028         |  1516 | 80348 |       |    28   (4)| 00:00:01 |
|* 13 |           HASH JOIN                         |                          |       |       |       |            |          |
|* 14 |            HASH JOIN                        |                          |       |       |       |            |          |
|* 15 |             INDEX RANGE SCAN                | IDX_T_BD_FUSEDSTATUS     |  1516 | 80348 |       |     2   (0)| 00:00:01 |
|  16 |             INDEX FAST FULL SCAN            | IDX_BD_SUPPLIER_NUM      |  1516 | 80348 |       |     6   (0)| 00:00:01 |
|* 17 |            INDEX FAST FULL SCAN             | IX_SUPPNAME              |  1516 | 80348 |       |    23   (0)| 00:00:01 |
|* 18 |          HASH JOIN RIGHT OUTER              |                          | 27628 |    16M|       | 16675   (1)| 00:03:21 |
|  19 |           TABLE ACCESS FULL                 | T_PAY_REMITTYPE          |     8 |   168 |       |     3   (0)| 00:00:01 |
|* 20 |           HASH JOIN RIGHT OUTER             |                          | 27628 |    15M|       | 16671   (1)| 00:03:21 |
|  21 |            TABLE ACCESS FULL                | T_PAY_FUNDTYPE           |    33 |  1023 |       |     3   (0)| 00:00:01 |
|* 22 |            HASH JOIN RIGHT OUTER            |                          | 27628 |    14M|       | 16668   (1)| 00:03:21 |
|  23 |             TABLE ACCESS FULL               | T_ORG_DEPARTMENT         | 16422 |   176K|       |   137   (1)| 00:00:02 |
|* 24 |             HASH JOIN RIGHT OUTER           |                          | 27628 |    14M|  5048K| 16530   (1)| 00:03:19 |
|  25 |              TABLE ACCESS FULL              | T_ORG_EMPLOYEE           |   147K|  3317K|       |   892   (1)| 00:00:11 |
|* 26 |              HASH JOIN RIGHT OUTER          |                          | 27628 |    13M|  4328K| 14680   (1)| 00:02:57 |
|  27 |               TABLE ACCESS FULL             | T_ORG_EMPLOYEE           |   147K|  2596K|       |   892   (1)| 00:00:11 |
|* 28 |               HASH JOIN RIGHT OUTER         |                          | 27628 |    13M|  4328K| 12889   (1)| 00:02:35 |
|  29 |                TABLE ACCESS FULL            | T_ORG_EMPLOYEE           |   147K|  2596K|       |   892   (1)| 00:00:11 |
|  30 |                NESTED LOOPS OUTER           |                          | 27628 |    13M|       | 11121   (1)| 00:02:14 |
|* 31 |                 HASH JOIN RIGHT OUTER       |                          | 27628 |    12M|       | 11120   (1)| 00:02:14 |
|  32 |                  TABLE ACCESS FULL          | T_DEPOSIT_PRINTER        |   420 | 28980 |       |     5   (0)| 00:00:01 |
|* 33 |                  TABLE ACCESS BY INDEX ROWID| T_CLAIM_REMITTANCERECORD | 27628 |    10M|       | 11114   (1)| 00:02:14 |
|* 34 |                   INDEX SKIP SCAN           | IDX_REMIT_COMP4          | 27714 |       |       |  5402   (1)| 00:01:05 |
|  35 |                 TABLE ACCESS BY INDEX ROWID | T_ORG_EMPLOYEE           |     1 |    18 |       |     1   (0)| 00:00:01 |
|* 36 |                  INDEX UNIQUE SCAN          | UK_EMPLOYEE_EMPCODE      |     1 |       |       |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------------------------------

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

   1 - filter("T"."NUM">0 AND "T"."NUM"<=50)
   5 - access("CUS"."FNUMBER"(+)=SYS_OP_C2C("A"."CUSTOMER"))
   7 - access("A"."REMITDEPART"="D"."FINASYSCODE"(+))
   8 - filter("D"."FINASYSCODE"(+) IS NOT NULL)
   9 - access("A"."PLAYDEPTNAME"="Y"."FINASYSCODE"(+))
  10 - filter("Y"."FINASYSCODE"(+) IS NOT NULL AND "Y"."STATUS"(+)=1)
  11 - access("FNUMBER"(+)=SYS_OP_C2C("A"."SUPPLIER"))
  13 - access(ROWID=ROWID)
  14 - access(ROWID=ROWID)
  15 - access("FUSEDSTATUS"=1)
  17 - filter("FUSEDSTATUS"=1)
  18 - access("A"."REMITTYPE"="B"."FID"(+))
  20 - access("C"."FID"(+)="A"."AMOUNTSCATEGORY")
  22 - access("F"."DEPTID"="K"."ID"(+))
  24 - access("F"."EMPCODE"(+)="A"."ADDPERSON")
  26 - access("G"."EMPCODE"(+)="A"."UPDATEPERSON")
  28 - access("H"."EMPCODE"(+)="A"."CLAIMMAN")
  31 - access("I"."CODENUM"(+)="A"."CODENUM")
  33 - filter("A"."REPEALSTATE"<>1)
  34 - access("A"."REACHAMOUNTDATE">=TIMESTAMP' 2014-01-01 00:00:00' AND "A"."REACHAMOUNTDATE"<=TIMESTAMP' 2014-04-01
              00:00:00')
       filter("A"."REACHAMOUNTDATE">=TIMESTAMP' 2014-01-01 00:00:00' AND "A"."WRITEOFFSTATE" LIKE '%未核销%' AND
              "A"."REACHAMOUNTDATE"<=TIMESTAMP' 2014-04-01 00:00:00' AND "A"."WRITEOFFSTATE" IS NOT NULL)
  36 - access("I"."CREATEUSER"="J"."EMPCODE"(+))

                 
迁移后的sql:
select *
  from (select rownum num, temp.*
          from (select  a.fid,
                       a.codenum,
                       a.parentcode,
                       a.remittername,
                       a.remitAccount,
                       a.receiveaddress,
                       a.accountname,
                       a.openbank,
                       a.accountno,
                       a.claimamount,
                       a.reachamountdate,
                       a.remitmethod,
                       b.type             remittype,
                       c.category         amountscategory,
                       a.belregion,
                       a.claimstate,
                       a.turnamountstate,
                       a.claimtime,
                       a.turnamounttime,
                       d.deptname         remitdepart,
                       a.remitaccountdate,
                       a.writeoffstate,
                       a.statementsencode,
                       a.transportinvoice,
                       a.alreadyamount,
                       a.unuseamount,
                       a.remark,
                       f.empname          addperson,
                       a.addtime,
                       g.empname          updateperson,
                       a.totamount,
                       h.empname          claimman,
                       a.status,
                       a.fundCompany,
                       a.recBelong,
                       k.principal,
                       a.updateTime,
                       a.repealState,
                       a.remitdepart      remitDeptCode,
                       a.claimType,
                       s.sname            as supplier,
                       a.payAppForm,
                       cus.fname_l2       as customer,
                       a.supplier         as supplierCode,
                       a.customer         as customerCode,
                       a.transactionId,
                       i.opendate         as recipIssu,
                       j.empname          as recipIssuName,
                       i.deposityno       as recipIssuCode,
                       a.collectiontype   as collectiontype,
                       y.deptname         as playdeptName,
                       a.playdeptname     as playdeptNameCode
                  from t_claim_remittancerecord a
                  left join t_pay_remittype b
                    on a.remittype = b.fid
                  left join t_pay_fundtype c
                    on c.fid = a.amountscategory
                  left join t_org_department d
                    on a.remitdepart = d.finasyscode
                  left join t_org_department y
                    on a.playdeptname = y.finasyscode
                   and y.status = 1
                  left join t_org_employee f
                    on f.empcode = a.addperson
                  left join t_org_department k
                    on f.deptid = k.id
                  left join t_org_employee g
                    on g.empcode = a.updateperson
                  left join t_org_employee h
                    on h.empcode = a.claimman
                  left join t_bd_customer@dipfin cus
                    on cus.fnumber = a.customer
                  left join V_LMS_SUPPLIER@difpin s
                    on s.snumber = a.supplier
                  left join t_deposit_printer i
                    on i.codenum = a.codenum
                  left join t_org_employee j
                    on i.createuser = j.empcode
                 WHERE 1 = 1
                   and a.writeOffState like '%未核销%'
                   and a.reachAmountDate between to_date('2014-01-01','yyyy-mm-dd') and to_date('2014-04-01','yyyy-mm-dd')
                   and a.repealstate != 1
                 order by addTime desc, codeNum) temp) t WHERE t.num<=50 and t.num>0
                 
                 
                 
Plan hash value: 3877825334

--------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                     | Name                     | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Inst   |IN-OUT|
--------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                              |                          | 27687 |    99M|       | 38384   (1)| 00:07:41 |        |      |
|*  1 |  VIEW                                         |                          | 27687 |    99M|       | 38384   (1)| 00:07:41 |        |      |
|   2 |   COUNT                                       |                          |       |       |       |            |          |        |      |
|   3 |    VIEW                                       |                          | 27687 |    99M|       | 38384   (1)| 00:07:41 |        |      |
|   4 |     SORT ORDER BY                             |                          | 27687 |    87M|   108M| 38384   (1)| 00:07:41 |        |      |
|   5 |      NESTED LOOPS OUTER                       |                          | 27687 |    87M|       | 19309   (1)| 00:03:52 |        |      |
|*  6 |       HASH JOIN RIGHT OUTER                   |                          | 27687 |    86M|       | 19308   (1)| 00:03:52 |        |      |
|   7 |        TABLE ACCESS FULL                      | T_DEPOSIT_PRINTER        |   420 | 28980 |       |     5   (0)| 00:00:01 |        |      |
|   8 |        VIEW                                   |                          | 27687 |    84M|       | 19302   (1)| 00:03:52 |        |      |
|*  9 |         HASH JOIN RIGHT OUTER                 |                          | 27687 |    88M|       | 19302   (1)| 00:03:52 |        |      |
|  10 |          REMOTE                               | V_LMS_SUPPLIER           |  1936 |   956K|       |    66   (0)| 00:00:01 | DIPFIN | R->S |
|  11 |          VIEW                                 |                          | 27687 |    74M|       | 19235   (1)| 00:03:51 |        |      |
|* 12 |           HASH JOIN RIGHT OUTER               |                          | 27687 |    24M|  8632K| 19235   (1)| 00:03:51 |        |      |
|  13 |            REMOTE                             | T_BD_CUSTOMER            | 27281 |  8312K|       |  1184   (1)| 00:00:15 | DIPFIN | R->S |
|* 14 |            HASH JOIN RIGHT OUTER              |                          | 27628 |    15M|       | 16821   (1)| 00:03:22 |        |      |
|  15 |             TABLE ACCESS FULL                 | T_ORG_DEPARTMENT         | 16422 |   176K|       |   137   (1)| 00:00:02 |        |      |
|* 16 |             HASH JOIN RIGHT OUTER             |                          | 27628 |    15M|       | 16683   (1)| 00:03:21 |        |      |
|* 17 |              TABLE ACCESS FULL                | T_ORG_DEPARTMENT         | 11447 |   413K|       |   137   (1)| 00:00:02 |        |      |
|* 18 |              HASH JOIN RIGHT OUTER            |                          | 27628 |    14M|       | 16545   (1)| 00:03:19 |        |      |
|* 19 |               TABLE ACCESS FULL               | T_ORG_DEPARTMENT         | 10843 |   423K|       |   137   (1)| 00:00:02 |        |      |
|* 20 |               HASH JOIN RIGHT OUTER           |                          | 27628 |    13M|  5048K| 16407   (1)| 00:03:17 |        |      |
|  21 |                TABLE ACCESS FULL              | T_ORG_EMPLOYEE           |   147K|  3317K|       |   897   (2)| 00:00:11 |        |      |
|* 22 |                HASH JOIN RIGHT OUTER          |                          | 27628 |    13M|  4328K| 14598   (1)| 00:02:56 |        |      |
|  23 |                 TABLE ACCESS FULL             | T_ORG_EMPLOYEE           |   147K|  2596K|       |   897   (2)| 00:00:11 |        |      |
|* 24 |                 HASH JOIN RIGHT OUTER         |                          | 27628 |    12M|  4328K| 12848   (1)| 00:02:35 |        |      |
|  25 |                  TABLE ACCESS FULL            | T_ORG_EMPLOYEE           |   147K|  2596K|       |   897   (2)| 00:00:11 |        |      |
|* 26 |                  HASH JOIN RIGHT OUTER        |                          | 27628 |    12M|       | 11122   (1)| 00:02:14 |        |      |
|  27 |                   TABLE ACCESS FULL           | T_PAY_FUNDTYPE           |    33 |  1023 |       |     3   (0)| 00:00:01 |        |      |
|* 28 |                   HASH JOIN RIGHT OUTER       |                          | 27628 |    11M|       | 11118   (1)| 00:02:14 |        |      |
|  29 |                    TABLE ACCESS FULL          | T_PAY_REMITTYPE          |     8 |   168 |       |     3   (0)| 00:00:01 |        |      |
|* 30 |                    TABLE ACCESS BY INDEX ROWID| T_CLAIM_REMITTANCERECORD | 27628 |    10M|       | 11114   (1)| 00:02:14 |        |      |
|* 31 |                     INDEX SKIP SCAN           | IDX_REMIT_COMP4          | 27714 |       |       |  5402   (1)| 00:01:05 |        |      |
|  32 |       TABLE ACCESS BY INDEX ROWID             | T_ORG_EMPLOYEE           |     1 |    18 |       |     1   (0)| 00:00:01 |        |      |
|* 33 |        INDEX UNIQUE SCAN                      | UK_EMPLOYEE_EMPCODE      |     1 |       |       |     1   (0)| 00:00:01 |        |      |
--------------------------------------------------------------------------------------------------------------------------------------------------

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

   1 - filter("T"."NUM">0 AND "T"."NUM"<=50)
   6 - access("I"."CODENUM"(+)="A"."CODENUM")
   9 - access("S"."SNUMBER"(+)=SYS_OP_C2C("A"."SUPPLIER"))
  12 - access("CUS"."FNUMBER"(+)=SYS_OP_C2C("A"."CUSTOMER"))
  14 - access("F"."DEPTID"="K"."ID"(+))
  16 - access("A"."REMITDEPART"="D"."FINASYSCODE"(+))
  17 - filter("D"."FINASYSCODE"(+) IS NOT NULL)
  18 - access("A"."PLAYDEPTNAME"="Y"."FINASYSCODE"(+))
  19 - filter("Y"."FINASYSCODE"(+) IS NOT NULL AND "Y"."STATUS"(+)=1)
  20 - access("F"."EMPCODE"(+)="A"."ADDPERSON")
  22 - access("H"."EMPCODE"(+)="A"."CLAIMMAN")
  24 - access("G"."EMPCODE"(+)="A"."UPDATEPERSON")
  26 - access("C"."FID"(+)="A"."AMOUNTSCATEGORY")
  28 - access("A"."REMITTYPE"="B"."FID"(+))
  30 - filter("A"."REPEALSTATE"<>1)
  31 - access("A"."REACHAMOUNTDATE">=TIMESTAMP' 2014-01-01 00:00:00' AND "A"."REACHAMOUNTDATE"<=TIMESTAMP' 2014-04-01 00:00:00')
       filter("A"."REACHAMOUNTDATE">=TIMESTAMP' 2014-01-01 00:00:00' AND "A"."WRITEOFFSTATE" LIKE '%未核销%' AND
              "A"."REACHAMOUNTDATE"<=TIMESTAMP' 2014-04-01 00:00:00' AND "A"."WRITEOFFSTATE" IS NOT NULL)
  33 - access("I"."CREATEUSER"="J"."EMPCODE"(+))

Remote SQL Information (identified by operation id):
----------------------------------------------------

  10 - SELECT "SNUMBER","SNAME" FROM "V_LMS_SUPPLIER" "S" (accessing 'DIPFIN' )

  13 - SELECT "FNAME_L2","FNUMBER" FROM "T_BD_CUSTOMER" "CUS" (accessing 'DIPFIN' )

使用道具 举报

回复
论坛徽章:
0
54#
发表于 2014-5-27 18:50 | 只看该作者
非常棒,帮我解决了大问题啊!

使用道具 举报

回复
论坛徽章:
3
2014年新春福章
日期:2014-02-18 16:49:31马上有钱
日期:2014-02-18 16:49:31优秀写手
日期:2014-02-21 06:00:14
55#
发表于 2014-7-17 09:31 | 只看该作者
真是不错的呢,值得大家学习。

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
11
ITPUB社区千里马徽章
日期:2013-06-09 10:15:34懒羊羊
日期:2015-03-04 14:52:11懒羊羊
日期:2015-02-10 13:36:05马上有对象
日期:2015-02-02 12:29:02红宝石
日期:2015-01-19 09:44:10马上有车
日期:2014-11-11 14:16:07马上有车
日期:2014-03-27 15:59:39优秀写手
日期:2014-03-12 06:00:13马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09
56#
发表于 2014-7-17 10:31 | 只看该作者
虽然还没看懂,还是V兔子一个。

使用道具 举报

回复
论坛徽章:
91
秀才
日期:2015-11-02 11:24:03秀才
日期:2017-12-12 10:00:50秀才
日期:2017-09-18 17:34:47秀才
日期:2017-09-18 17:02:592017金鸡报晓
日期:2017-02-08 14:09:132017金鸡报晓
日期:2017-01-10 15:39:05秀才
日期:2016-12-21 16:55:07ITPUB15周年纪念
日期:2016-10-06 10:54:102016猴年福章
日期:2016-02-23 09:58:342016猴年福章
日期:2016-02-18 09:31:30
57#
发表于 2014-7-19 00:06 | 只看该作者
分布式SQL的相关帖子很少,兔子果然威武。

使用道具 举报

回复
论坛徽章:
6
优秀写手
日期:2013-12-18 09:29:09奔驰
日期:2013-12-20 11:15:442014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25
58#
发表于 2014-8-4 10:49 | 只看该作者
本帖最后由 bjddd192 于 2014-8-4 10:51 编辑

写的真好,受益匪浅啊。
我最近也用到了dblink,发生产后发现有性能问题,用DRIVING_SITE HINT优化产生了一些作用,但是发现居然数据不准了,数据少了
原语句:
WITH TEMPA AS
(
        SELECT nvl(A.po_no,'-') DRP_BILLNO,A.UNTREAD_NO,A.LOCNO STORE_NO,B.ZONE_NO,
                a.locno SEND_STORE,a.store_no RECEIPT_STORE,A.STATUS,
                d.CREATETM DOWN_TIME,d.predeltime REQ_CAR_TIME,
                ( CASE WHEN a.untread_type IN ('3','4') THEN 1 ELSE 0 END) QUALITY,c.sys_no SYS_NO,
               (SELECT min(z.createtm)  FROM city_bill_um_receipt z WHERE z.untread_no=a.untread_no) RECEIPT_TIME
        FROM city_bill_um_untread A
        INNER JOIN CITY_STORE B ON A.LOCNO = B.STORE_NO
        INNER JOIN CITY_STORE c ON A.STORE_NO= c.STORE_NO
        LEFT JOIN Bill_Delivery d ON d.bill_no=a.po_no
        WHERE  NOT EXISTS (SELECT 1 FROM RPT_UNTREAD Z WHERE A.UNTREAD_NO = Z.UNTREAD_NO)
                AND ROWNUM <= 1000
),
TEMPB AS
(
        SELECT H.UNTREAD_NO,
                COUNT(DISTINCT H.BOX_NO) SEND_BOX_QTY,SUM(H.item_qty) SEND_QTY
        FROM CITY_BILL_UM_UNTREAD_DTL H
        WHERE H.UNTREAD_NO IN (SELECT UNTREAD_NO FROM TEMPA)
        GROUP BY H.UNTREAD_NO
)
SELECT a.DRP_BILLNO,a.UNTREAD_NO,a.ZONE_NO,a.STORE_NO,a.QUALITY,a.DOWN_TIME,
        NULL REQ_CAR_TIME,NULL ARRIVE_TIME,a.RECEIPT_TIME,a.SEND_STORE,a.RECEIPT_STORE,
        b.SEND_QTY,b.SEND_BOX_QTY,NULL REF_ORDER,a.STATUS,a.SYS_NO
FROM TEMPA A
INNER JOIN TEMPB B ON A.UNTREAD_NO = B.UNTREAD_NO;
返回结果为1000行,加了HINT后:
WITH
TEMPA AS
(
        SELECT /*+DRIVING_SITE(A)*/ nvl(A.po_no,'-') DRP_BILLNO,A.UNTREAD_NO,A.LOCNO STORE_NO,B.ZONE_NO,
                a.locno SEND_STORE,a.store_no RECEIPT_STORE,A.STATUS,
                d.CREATETM DOWN_TIME,d.predeltime REQ_CAR_TIME,
                ( CASE WHEN a.untread_type IN ('3','4') THEN 1 ELSE 0 END) QUALITY,c.sys_no SYS_NO,
               (SELECT min(z.createtm)  FROM city_bill_um_receipt z WHERE z.untread_no=a.untread_no) RECEIPT_TIME
        FROM city_bill_um_untread A
        INNER JOIN CITY_STORE B ON A.LOCNO = B.STORE_NO
        INNER JOIN CITY_STORE c ON A.STORE_NO= c.STORE_NO
        LEFT JOIN Bill_Delivery d ON d.bill_no=a.po_no
        WHERE NOT EXISTS (SELECT 1 FROM RPT_UNTREAD Z WHERE A.UNTREAD_NO = Z.UNTREAD_NO)
                AND ROWNUM <= 1000
),
TEMPB AS
(
        SELECT /*+DRIVING_SITE(H)*/ H.UNTREAD_NO,
                COUNT(DISTINCT H.BOX_NO) SEND_BOX_QTY,SUM(H.item_qty) SEND_QTY
        FROM CITY_BILL_UM_UNTREAD_DTL H
        INNER JOIN TEMPA A ON A.UNTREAD_NO = H.UNTREAD_NO
        GROUP BY H.UNTREAD_NO
)
SELECT a.DRP_BILLNO,a.UNTREAD_NO,a.ZONE_NO,a.STORE_NO,a.QUALITY,a.DOWN_TIME,
        NULL REQ_CAR_TIME,NULL ARRIVE_TIME,a.RECEIPT_TIME,a.SEND_STORE,a.RECEIPT_STORE,
        b.SEND_QTY,b.SEND_BOX_QTY,NULL REF_ORDER,a.STATUS,a.SYS_NO
FROM TEMPA A
INNER JOIN TEMPB B ON A.UNTREAD_NO = B.UNTREAD_NO;
返回结构只有253行了,真是很奇怪,不知道这结果是怎么来的,大大帮分析下
我不用with as语法,改成子查询就是OK的,为什么会这样呢?如果在dblink里面想用临时表,而且把这个临时表建到远端有什么好办法
我的CITY_打头的就是远程表

使用道具 举报

回复
论坛徽章:
8
生肖徽章2007版:猴
日期:2008-01-02 17:35:532010广州亚运会纪念徽章:举重
日期:2010-11-15 11:33:212010广州亚运会纪念徽章:现代五项
日期:2011-05-13 07:05:57ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:50:442014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上加薪
日期:2014-04-04 08:26:40
59#
发表于 2014-8-19 15:34 | 只看该作者
丁总V5 无意中搜索看到的 非常详细!!

使用道具 举报

回复
论坛徽章:
7
优秀写手
日期:2013-12-18 09:29:08问答徽章
日期:2014-02-07 23:48:392014年新春福章
日期:2014-02-18 16:50:09马上有车
日期:2014-02-18 16:50:09马上有钱
日期:2014-10-26 21:51:11暖羊羊
日期:2015-03-04 14:54:572015年新春福章
日期:2015-03-06 11:59:47
60#
发表于 2014-8-30 22:58 | 只看该作者
兔子兄:
     我在个人网页中引用了你这个贴,谢谢。

使用道具 举报

回复

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

本版积分规则 发表回复

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