Hi,
I have a query which is executing with in a second if i dont give parameters in it. but when i include parameters, it is taking more than half an hour to display result. I tried by replacing subqueries with views, but the performance is same with both subqueries and views. So please help me on how to execute this query fast.
SELECT
DPRDC.CATE_NAME "LOB",
MPRD.PRODUCT_NAME "Product",
MPOLG.PLAN_GROUP_NAME "Plan Group",
MPLN.PLAN_NAME "Plan",
Limited_SI "Count of Policies",
FAILED_PREM "Sum of total Premium",
Unlimited_SI "Count of Policies (U SI)",--(Unlimited SI)",
PASSED_PREM "Sum of total Premium (U SI)",--(UnlimitedSI)",
FROM
M_POLICY MPOL
JOIN D_PRODUCT_CATEGORY DPRDC
ON DPRDC.CATE_ID=MPOL.PRODUCT_CATE_ID
JOIN M_PRODUCT MPRD
ON MPRD.PRODUCT_ID=MPOL.PRODUCT_ID
JOIN M_INSURED MI
ON MI.POLICY_ID=MPOL.POLICY_ID
JOIN M_PLAN MPLN
ON MPLN.PLAN_ID=MI.PLAN_ID
JOIN M_PLAN_GROUP MPOLG
ON MPOLG.PLAN_GROUP_ID=MI.PLAN_GROUP_ID
LEFTJOIN (SELECT M.PRODUCT_ID AS PRODUCTID,
MI.PLAN_GROUP_ID AS PLANGROUPID,
MI.PLAN_ID AS PLANID,
SUM(PASSED)AS UNLIMITED_SI,
SUM(FAILED) AS LIMITED_SI
FROM M_POLICY_COVER MPC, M_POLICY
M, M_INSURED MI,
(SELECT
F.POLICY_NO POLICYNO,
COUNT(DISTINCT (CASEWHEN F.GROSS_WRITTEN_PREM_TCUR=0.25THEN POLICY_NO END)) AS PASSED,
CASEWHENCOUNT(DISTINCT (CASEWHEN F.GROSS_WRITTEN_PREM_TCUR=0.25THEN POLICY_NO END))=0
THEN1ELSE0ENDAS FAILED
FROM F_PREM_TRANS F
GROUPBY
F.POLICY_NO)
WHERE
POLICYNO=M.POLICY_NO
AND M.POLICY_ID=MPC.POLICY_ID(+)
AND MI.INSURED_ID=MPC.INSURED_ID
GROUPBY
M.PRODUCT_ID,MI.PLAN_GROUP_ID,
MI.PLAN_ID
ORDERBY
M.PRODUCT_ID,MI.PLAN_GROUP_ID,
MI.PLAN_ID
)
ON PLANID=MPLN.PLAN_ID
AND PRODUCTID=MPRD.PRODUCT_ID
AND
PLANGROUPID=MPOLG.PLAN_GROUP_ID
LEFTJOIN (SELECT B.PRODUCT_ID AS PRODUCTID2,
MI.PLAN_GROUP_ID AS PLANGROUPID2,
MI.PLAN_ID AS PLANID2,
SUM(B.GROSS_WRITTEN_PREM_TCUR) AS PASSED_PREM
FROM
(SELECTCASEWHEN PASSED=1THEN POLICYNO ENDAS PASSED_POL FROM
(SELECT F.POLICY_NO
POLICYNO,
COUNT(DISTINCT (CASEWHEN F.GROSS_WRITTEN_PREM_TCUR=0.25THEN POLICY_NO END)) AS PASSED
FROM
F_PREM_TRANS F
GROUPBY
F.POLICY_NO)
) A,F_PREM_TRANS B,M_INSURED MI
WHERE
(B.POLICY_NO=A.PASSED_POL)
AND
MI.INSURED_ID=B.INSURED_HID
GROUPBY
B.PRODUCT_ID,MI.PLAN_GROUP_ID,
MI.PLAN_ID
ORDERBY
B.PRODUCT_ID,MI.PLAN_GROUP_ID,
MI.PLAN_ID)
ON
PLANID2=MPLN.PLAN_ID
AND
PLANGROUPID2=MPOLG.PLAN_GROUP_ID
AND
PRODUCTID2=MPRD.PRODUCT_ID
LEFTJOIN (SELECT B.PRODUCT_ID AS PRODUCTID3,
MI.PLAN_GROUP_ID AS PLANGROUPID3,
MI.PLAN_ID AS PLANID3,
SUM(B.GROSS_WRITTEN_PREM_TCUR)AS
FAILED_PREM
FROM
SELECTCASEWHEN FAILED=1THEN POLICYNO ENDAS FAILED_POL FROM
(SELECT F.POLICY_NO POLICYNO,
CASEWHENCOUNT(DISTINCT (CASEWHEN F.GROSS_WRITTEN_PREM_TCUR=0.25THEN POLICY_NO END))=0
THEN1ELSE0ENDAS FAILED
FROM
F_PREM_TRANS F
GROUPBY
F.POLICY_NO)
) A,F_PREM_TRANS B,M_INSURED MI
WHERE
(B.POLICY_NO=A.FAILED_POL)
AND
MI.INSURED_ID=B.INSURED_MID
GROUPBY
B.PRODUCT_ID,MI.PLAN_GROUP_ID,
MI.PLAN_ID
ORDERBY
B.PRODUCT_ID,MI.PLAN_GROUP_ID,
MI.PLAN_ID)
ON
PLANID3=MPLN.PLAN_ID
AND
PLANGROUPID3=MPOLG.PLAN_GROUP_ID
AND
PRODUCTID3=MPRD.PRODUCT_ID
WHERE
DPRDC.CATE_NAME IN&p_lob --'Plus'
AND MPRD.PRODUCT_NAME IN&p_product --'Maid Insurance'
AND MPOLG.PLAN_GROUP_NAME IN&p_plan_group --'Abnormal'
AND MPLN.PLAN_NAME IN&p_plan --'Standard'
GROUPBY
DPRDC.CATE_NAME,
MPRD.PRODUCT_NAME,
MPOLG.PLAN_GROUP_NAME,
MPLN.PLAN_NAME,
MPLN.PLAN_ID,
Unlimited_SI,
Limited_SI,
FAILED_PREM,
PASSED_PREM,
ORDERBY
DPRDC.CATE_NAME,
MPRD.PRODUCT_NAME,
MPOLG.PLAN_GROUP_NAME,
MPLN.PLAN_NAME