oracle guru Burleson's note helped me to improve performance on a query cross database link
http://www.dba-oracle.com/t_with_clause.htm
we have a database link from oracle to MS SQL server using oracle DRDA, the following query take long to complete, I cannot wait for it to complete and have to kill the query.
SELECT count(*) FROM "ContractItem"@QSENCT002 A, "contractheader_cr"@QSENCT002 B
WHERE A. "ContractHeaderID" = B. "contractheaderid"
AND "ContractItemDayID" BETWEEN 37345 AND 37346
and not exists
(SELECT REVENUESTREAMEXPORTID FROM radiostage.REVENUESTREAMEXPORT_XREF WHERE DIVESTED = 'Y' and A."RevenueStreamExportID" =REVENUESTREAMEXPORTID )
/
After re-write the query using with clause and materialize hint, the query complete in 1 second.
However, if I give bigger range of date in the query, the performance is not improved much, so it's depends on case by case.
http://www.dba-oracle.com/t_with_clause.htm
we have a database link from oracle to MS SQL server using oracle DRDA, the following query take long to complete, I cannot wait for it to complete and have to kill the query.
SELECT count(*) FROM "ContractItem"@QSENCT002 A, "contractheader_cr"@QSENCT002 B
WHERE A. "ContractHeaderID" = B. "contractheaderid"
AND "ContractItemDayID" BETWEEN 37345 AND 37346
and not exists
(SELECT REVENUESTREAMEXPORTID FROM radiostage.REVENUESTREAMEXPORT_XREF WHERE DIVESTED = 'Y' and A."RevenueStreamExportID" =REVENUESTREAMEXPORTID )
/
After re-write the query using with clause and materialize hint, the query complete in 1 second.
However, if I give bigger range of date in the query, the performance is not improved much, so it's depends on case by case.
with ctview as
(select /*+ materialize */ *
FROM "ContractItem"@QSENCT002 A,
"contractheader_cr"@QSENCT002 B
WHERE A.
"ContractHeaderID" = B. "contractheaderid"
AND
"ContractItemDayID" BETWEEN 37345 AND 37346)
select count(*) from ctview
where
ctview."RevenueStreamExportID" NOT IN (SELECT REVENUESTREAMEXPORTID
FROM radiostage.REVENUESTREAMEXPORT_XREF WHERE DIVESTED = 'Y')
/
COUNT(*)
----------
0
Elapsed: 00:00:00.88
Execution Plan
----------------------------------------------------------
Plan hash value: 1488614543
--------------------------------------------------------------------------------------------------------------------------
| Id |
Operation
|
Name
| Rows | Bytes | Cost (%CPU)| Time | Inst |IN-OUT|
--------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT
STATEMENT
|
|
1 | 18 | 406 (1)| 00:00:05
| | |
| 1 | TEMP
TABLE TRANSFORMATION
|
| |
|
| |
| |
| 2 |
LOAD AS SELECT |
SYS_TEMP_0FD9D6603_13638A70 |
|
|
| |
| |
| 3
|
REMOTE
|
| 5 | 1300 | 200 (0)|
00:00:03 | QSENC~ | R->S |
| 4 |
SORT AGGREGATE
|
| 1 | 18 |
|
| | |
|* 5 |
HASH JOIN ANTI NA
|
| 1 | 18 |
6 (17)| 00:00:01 |
| |
| 6
|
VIEW
|
| 5 | 65 |
2 (0)| 00:00:01 |
| |
| 7
| TABLE ACCESS FULL |
SYS_TEMP_0FD9D6603_13638A70 | 5 | 1365
| 2 (0)| 00:00:01
| | |
|* 8
| TABLE ACCESS FULL |
REVENUESTREAMEXPORT_XREF | 4
| 20 | 3 (0)| 00:00:01
| | |
--------------------------------------------------------------------------------------------------------------------------
Predicate Information
(identified by operation id):
---------------------------------------------------
5 -
access("CTVIEW"."RevenueStreamExportID"="REVENUESTREAMEXPORTID")
8 -
filter("DIVESTED"='Y')
Remote SQL Information
(identified by operation id):
----------------------------------------------------
3 - SELECT
A1."ContractItemID",A1."ContractHeaderID",A1."RevenueStreamExportID",A1."ContractItemDayID",A1."DayP
artHalfHourID",A1."TransactionDayID",A1."ContractItemStatusID",A1."ContractItemTypeID",A1."SaleTypeID",A1."Industr
yProductID",A1."TransactionCodeID",A1."AnnouncementTypeID",A1."NumberOfItems",A1."TotalCostGross",A1."TotalCostNet
",A1."TotalValueGross",A1."TotalValueNet",A1."IsBroadcast",A1."SpotLengthID",A1."CustomerID",A2."contractheaderid"
FROM "ContractItem" A1,"contractheader_cr" A2 WHERE
A1."ContractHeaderID"=A2."contractheaderid" AND
A1."ContractItemDayID">=37345 AND
A1."ContractItemDayID"<=37346 (accessing 'QSENCT002' )
Statistics
----------------------------------------------------------
205 recursive calls
7 db block gets
217 consistent gets
9 physical reads
1392 redo size
209 bytes sent via SQL*Net to client
252 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
1 rows processed
11:26:12 RMS8DEV>
Comments
Post a Comment