夥計們,我有以下的Oracle SQL查詢,給我的日期之間的月份報告。基本上,nov月我想要的日期之間01nov到30 nov之間的值的總和。 正在查詢的表位於另一個數據庫中,並使用dblink訪問。 DT列是NUMBER類型的(例如20101201)。甲骨文SQL查詢需要一天的時間返回結果使用dblink
SELECT /*+ PARALLEL (A 8) */ /*+ DRIVING_STATE(A) */
TO_CHAR(TRUNC(TRUNC(SYSDATE,'MM')- 1,'MM'),'MONYYYY') "MONTH",
TYPE AS "TYPE", COLUMN, COUNT (DISTINCT A) AS "A_COUNT",
COUNT (COLUMN) AS NO_OF_COLS, SUM (DURATION) AS "SUM_DURATION",
SUM (COST) AS "COST" FROM **[email protected]_PROD A**
WHERE DT >= TO_NUMBER(TO_CHAR(add_months(SYSDATE,-1),'YYYYMM"01"'))
AND DT < TO_NUMBER(TO_CHAR(SYSDATE,'YYYYMM"01"'))
GROUP BY TYPE, COLUMN
查詢的執行需要一整天的時間並且沒有完成。好心建議我,如果他們是可以建議我的數據庫管理員在dblink上的任何優化,或任何可以在查詢上完成的調整,或重寫相同。
地更新其表
該表partiontioned日期列和近十億的記錄。
下面我給出的從TOAD EXPLAIN PLAN
**Plan**
SELECT STATEMENT REMOTE ALL_ROWSCost: 1,208,299 Bytes: 34,760 Cardinality: 790
12 PX COORDINATOR
11 PX SEND QC (RANDOM) SYS.:TQ10002 Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
10 SORT GROUP BY Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
9 PX RECEIVE Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
8 PX SEND HASH SYS.:TQ10001 Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
7 SORT GROUP BY Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
6 PX RECEIVE Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
5 PX SEND HASH SYS.:TQ10000 Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
4 SORT GROUP BY Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
3 FILTER
2 PX BLOCK ITERATOR Cost: 1,203,067 Bytes: 15,066,833,144 Cardinality: 342,428,026 Partition #: 11 Partitions accessed #1 - #5
1 TABLE ACCESS FULL TABLE CDRR.FRD_CDF_DATA_INTL_IN_P Cost: 1,203,067 Bytes: 15,066,833,144 Cardinality: 342,428,026 Partition #: 11
下面的事情我今天做的,任何額外的提示,將是有益的。
- 我要收集此表,這可能會給最佳 執行計劃的tablewise統計。
- 檢查是否爲該分區創建了本地索引。
- 使用BETWEEN而不是> =和<。
只是好奇,多久沒有考慮到遠程數據庫上直接運行?如果查詢本身花費很長時間,那麼數據庫鏈接可能是一條紅鯡魚。 – 2011-01-06 13:44:24
10億行!難怪需要很長時間!網絡速度不錯 – 2011-01-06 13:49:16