Выполнение выражений Я ИМЕЮ ниже запрос, слишком долго ВЕРНУТЬ ЗАПИСИSQL Query принимает долго, чтобы
{SELECT /*+ PARALLEL(5) */
EXTER.ACE_IT_REGION_ID ,
EXTER.ACE_IT_LOCATION_CODE,
EXTER.ACE_IT_ORD_NUM,
EXTER.TOTAL_ITEM_PRICE_PER_ORDER,
EXTER.TOTAL_ACE_PAYD_AMOUNT,
EXTER.ACE_ORD_COMPLETION_TIME AS DATEOFDATA
FROM
(SELECT /*+ use_hash(TAB1,TAB2) +*/
DISTINCT
TAB1.ACE_IT_REGION_ID ,
TAB1.ACE_IT_LOCATION_CODE,
TAB1.ACE_IT_ORD_NUM,
TAB1.TOTAL_ITEM_PRICE_PER_ORDER,
TAB2.TOTAL_ACE_PAYD_AMOUNT,
TAB1.ACE_ORD_COMPLETION_TIME
FROM
(SELECT AAA.ACE_IT_REGION_ID,
AAA.ACE_IT_LOCATION_CODE,
AAA.ACE_IT_ORD_NUM,
AAA.SUM_PRICE_PLUS_TAX,
AAA.TOTAL_DISCOUNT,
(AAA.SUM_PRICE_PLUS_TAX-AAA.TOTAL_DISCOUNT) AS TOTAL_ITEM_PRICE_PER_ORDER,
TRUNC(AAA.ACE_ORD_COMPLETION_TIME)
FROM (SELECT B.ACE_IT_REGION_ID AS ACE_IT_REGION_ID,
B.ACE_IT_LOCATION_CODE AS ACE_IT_LOCATION_CODE,
B.ACE_IT_ORD_NUM AS ACE_IT_ORD_NUM,
(SUM(B.ACE_IT_ITEM_PRICE + B.ACE_IT_TAX_AMT)*B.ACE_IT_QTY) AS SUM_PRICE_PLUS_TAX,
SUM(B.ACE_IT_DISC_AMT+B.ACE_IT_AUTO_DISC_AMT) AS TOTAL_DISCOUNT,
TRUNC(A.ACE_ORD_COMPLETION_TIME) AS ACE_ORD_COMPLETION_TIME
FROM POSDB.ACE_ORDERS A, POSDB.ACE_ITEM_TRAN B
WHERE A.ACE_ORD_COMPLETION_TIME >= TRUNC(SYSDATE -1)
AND A.ACE_ORD_COMPLETION_TIME < TRUNC(SYSDATE)
AND A.ACE_ORD_REGION_ID = B.ACE_IT_REGION_ID
AND A.ACE_ORD_LOCATION_CODE = B.ACE_IT_LOCATION_CODE
AND A.ACE_ORD_NUM = B.ACE_IT_ORD_NUM
AND A.ACE_ORD_TYPE = 'IS'
AND (A.ACE_ORD_STATUS = 'CR'
OR A.ACE_ORD_STATUS IS NULL
OR A.ACE_ORD_STATUS LIKE ' %'
OR A.ACE_ORD_STATUS LIKE '% ')
AND (B.ACE_IT_VOID_IND <> 'V' OR B.ACE_IT_VOID_IND IS NULL)
GROUP BY B.ACE_IT_REGION_ID,
B.ACE_IT_LOCATION_CODE,
B.ACE_IT_ORD_NUM,
A.ACE_ORD_COMPLETION_TIME) AAA
ORDER BY AAA.ACE_IT_REGION_ID,
AAA.ACE_IT_LOCATION_CODE,
AAA.ACE_IT_ORD_NUM,
AAA.ACE_ORD_COMPLETION_TIME) TAB1,
(SELECT ACE_PAYD_REGION_ID,
ACE_PAYD_LOCATION_CODE,
ACE_PAYD_ORD_NUM,
SUM(ACE_PAYD_AMOUNT) TOTAL_ACE_PAYD_AMOUNT
FROM POSDB.ACE_PAYMENT_DTL
WHERE ACE_PAYD_POSTING_TIMESTAMP BETWEEN TRUNC(SYSDATE-1) AND TRUNC(SYSDATE)
AND (ACE_PAYD_STATUS <> 'V' OR ACE_PAYD_STATUS IS NULL)
GROUP BY
ACE_PAYD_REGION_ID,
ACE_PAYD_LOCATION_CODE,
ACE_PAYD_ORD_NUM) TAB2
WHERE TAB1.ACE_IT_REGION_ID = TAB2.ACE_PAYD_REGION_ID
AND TAB1.ACE_IT_LOCATION_CODE = TAB2.ACE_PAYD_LOCATION_CODE
AND TAB1.ACE_IT_ORD_NUM = TAB2.ACE_PAYD_ORD_NUM
ORDER BY
TAB1.ACE_IT_REGION_ID ,
TAB1.ACE_IT_LOCATION_CODE,
TAB1.ACE_IT_ORD_NUM ) EXTER
WHERE (EXTER.TOTAL_ITEM_PRICE_PER_ORDER = EXTER.TOTAL_ACE_PAYD_AMOUNT)
AND EXTER.ACE_ORD_COMPLETION_TIME IS NOT NULL;}
Пожалуйста, дайте мне какие-либо предложения. Я использовал намеки, но все же не уверен, что это займет время. все столы огромны около 300 000 000 каждый.
перед тем, как присоединиться к таблице te в таблице таблиц tab3, это заняло 5 минут ... но теперь даже после 20-25 минут он не возвращает записи.
Вы используете индексы? – peter