와 인덱스 힌트를 무시합니다. 당신이 볼 수 있듯이, 내가보기 V_AMV_PLG_ORDER_HISTORY_200_MS에서 조회하고오라클이 내가 실행하고 쿼리입니다 동의어 및 2보기
, 여기의 SQL 쿼리를 볼 수 있습니다
V_AMV_PLG_ORDER_HISTORY_200_MS view SQL Query:
SELECT AMV_PERF_PROFILES_FRONTEND.AMV_PLG_GET_SEGMENT(200, orders.ORDER_GLOBAL_DATE_TIME) AS ORDER_DATE_TIME,
SUM(orders.BASE_VOLUME) AS VOLUME,
SUM(orders.BASE_CURR_LIMIT_PRICE*orders.BASE_VOLUME)/SUM(orders.BASE_VOLUME) AS PRICE,
orders.PRODUCT_SK AS PRODUCT_SK,
orders.EXCHANGE_SK AS EXCHANGE_SK,
orders.DIRECTION_CD AS DIRECTION_CD,
orders.AGG_UNIT_CD AS AGG_UNIT_CD,
orders.TRADER_KEY AS EXECUTING_REPRESENTATIVE_KEY,
orders.ACCOUNT_KEY AS ACCOUNT_KEY,
a.BUSINESS_UNIT_CD AS BUSINESS_UNIT_CD
FROM AMV_PERF_PROFILES_FRONTEND.S_AMV_ORDER_VERSION_NEW orders
INNER JOIN AMV_PERF_PROFILES_FRONTEND.S_AMV_ACCOUNT a
ON a.ACCOUNT_KEY = orders.ACCOUNT_KEY
WHERE BASE_VOLUME > 0
GROUP BY AMV_PERF_PROFILES_FRONTEND.AMV_PLG_GET_SEGMENT(200, orders.ORDER_GLOBAL_DATE_TIME),
orders.PRODUCT_SK,
orders.EXCHANGE_SK,
orders.ACCOUNT_KEY,
a.BUSINESS_UNIT_CD,
orders.AGG_UNIT_CD,
orders.TRADER_KEY,
orders.DIRECTION_CD;
그는에, 다른 방식에 지시하는 동의어 S_AMV_ORDER_VERSION_NEW를 사용하여 데이터를 받고있다 보기 여기의 SQL 쿼리, V_AMV_ORDER_VERSION 및 주문으로 그것을 다스 려라고는 :
T0 로에 테이블라고 ORDER_VERSION에서 데이터를 받아 의미V_AMV_ORDER_VERSION view Sql query:
SELECT T1.ENTITY_KEY ,
T2.AGG_UNIT_CD ,
T0.BASE_CURR_LIMIT_PRICE ,
T7.DIRECTION_CD ,
T0.EXCHANGE_SK,
T0.ORDER_LOCAL_DATE_TIME ,
T0.PRODUCT_SK,
T18.ENTITY_KEY ,
T19.ENTITY_KEY ,
T0.NOTIONAL_VALUE2 ,
T0.NOTIONAL_VALUE ,
T0.ORDER_GLOBAL_DATE_TIME ,
T0.BASE_VOLUME ,
T31.TRANSACTION_STATUS_CD ,
T0.ORDER_VERSION_KEY
FROM ETS_UDM_CDS_NEW.ORDER_VERSION T0
LEFT OUTER JOIN ETS_UDM_CDS_NEW.ENTITY T1
ON T0.ACCOUNT_SK = T1.ENTITY_SK
LEFT OUTER JOIN ETS_UDM_CDS_NEW.AGG_UNIT T2
ON T0.AGG_UNIT_SK = T2.ENTITY_SK
LEFT OUTER JOIN ETS_UDM_CDS_NEW.DIRECTION T7
ON T0.DIRECTION_SK = T7.ENTITY_SK
LEFT OUTER JOIN ETS_UDM_CDS_NEW.ENTITY T18
ON T0.LOCAL_TIME_ZONE_SK = T18.ENTITY_SK
LEFT OUTER JOIN ETS_UDM_CDS_NEW.ENTITY T19
ON T0.TRADER_SK = T19.ENTITY_SK
LEFT OUTER JOIN ETS_UDM_CDS_NEW.TRANSACTION_STATUS T31
ON T0.TRANSACTION_STATUS_SK = T31.ENTITY_SK;
이 테이블은 IDX_ORDER_VERSION라는 인덱스가
오라클은 내 힌트를 무시하고 다른 인덱스를 사용합니다. 이제는 oracle이 테이블에서 데이터를 가져 오는 뷰를 쿼리 할 때 원하는 인덱스를 사용하도록 힌트를 사용했습니다. 그러나 이번에는 테이블에서 데이터를 가져 오는 다른 뷰에서 그의 데이터를 가져 오는 뷰를 쿼리하고 있습니다. 또한, 라인의 두 번째보기는 다른 스키마에 있으며 동의어를 사용하고 있습니다. 그래서 아마도 내가 뭔가를 놓치고있는 이유입니다. 가능한 솔루션의 조합을 여러 번 시도했지만 아무 것도 작동하지 않는 것 같습니다. ..
내가 (동의어없이) V_AMV_ORDER_VERSION에서 직접 한 단계 앞으로 이동 및 쿼리 경우 IT가 작동하고 내가 원하는 인덱스 오라클 작업을 할 수 있기 때문에이 쿼리가 완벽하게 작동하는지 말할 것:
select /*+ index(orders.T0 IDX_ORDER_VERSION_5) */ * from V_AMV_ORDER_VERSION orders
where EXCHANGE_SK =32 and PRODUCT_SK = 1000169
오라클 설명서를 말한다 :
V_AMV_PLG_ORDER_HISTORY_200_MS가 SQL 쿼리를 볼 수 있습니다. 뷰가 복잡한 경우 힌트는 기본 테이블에 전파되지 않습니다. –