Please help optimize my query.
I'm creating a report that shows usage and sales of inventory over the past 90 days. In addition, I need to report to list the Last Activity Date for each product.
I have a query to give me all activity - CSP IPs. This takes about 5 seconds to run. To filter that to only activity within last 90 days for queries that total sales and usage over this period, I have another query:
This query takes 10 to 15 minutes to run. Even if I add that date criteria to the date field in the [CSP IPs] query itself, it goes from 5 second to much much longer.
Why does adding that one Date criteria make the query take so much longer to run?
Here is the SQL on the [CSP IPs] query
I'm creating a report that shows usage and sales of inventory over the past 90 days. In addition, I need to report to list the Last Activity Date for each product.
I have a query to give me all activity - CSP IPs. This takes about 5 seconds to run. To filter that to only activity within last 90 days for queries that total sales and usage over this period, I have another query:
Select * From [CSP IPs] Where ([CSP IPs].[Date] > (Date()-90));
This query takes 10 to 15 minutes to run. Even if I add that date criteria to the date field in the [CSP IPs] query itself, it goes from 5 second to much much longer.
Why does adding that one Date criteria make the query take so much longer to run?
Here is the SQL on the [CSP IPs] query
SELECT informix_injitd_rec.itd_cmpy_id AS Company, informix_injitd_rec.itd_actvy_dt AS [Date], informix_injitd_rec.itd_bgt_for AS BoughtFor, informix_injitd_rec.itd_bgt_for_id AS Customer, informix_injitd_rec.itd_ref_pfx AS IPPfx, informix_injitd_rec.itd_ref_no AS IPNum, informix_injitd_rec.itd_ref_itm AS IPItem, informix_injitd_rec.itd_ref_sbitm AS IPSubItem, informix_injitd_rec.itd_trs_seq_no AS TransSeq, informix_injitv_rec.itv_trs_wgt AS Quantity, informix_injitd_rec.itd_frm AS Form, informix_injitd_rec.itd_grd AS Grade, informix_injitd_rec.itd_size AS [Size], informix_injitd_rec.itd_fnsh AS Finish, informix_injitd_rec.itd_wdth AS Width, informix_injitd_rec.itd_lgth AS Length, informix_ipjsoh_rec.soh_ord_pfx AS SOPfx, informix_ipjsoh_rec.soh_ord_no AS [Order], informix_ipjsoh_rec.soh_ord_itm AS OrderItem, informix_ipjsoh_rec.soh_ord_sitm AS OrderRelease, informix_sahstn_rec.stn_tot_val AS [Value], informix_sahstn_rec.stn_npft_avg_val AS NetProfit
FROM informix_inrcsp_rec INNER JOIN ((((informix_injitd_rec INNER JOIN informix_injitv_rec ON (informix_injitd_rec.itd_trs_seq_no = informix_injitv_rec.itv_trs_seq_no) AND (informix_injitd_rec.itd_actvy_dt = informix_injitv_rec.itv_actvy_dt) AND (informix_injitd_rec.itd_ref_sbitm = informix_injitv_rec.itv_ref_sbitm) AND (informix_injitd_rec.itd_ref_itm = informix_injitv_rec.itv_ref_itm) AND (informix_injitd_rec.itd_ref_no = informix_injitv_rec.itv_ref_no) AND (informix_injitd_rec.itd_ref_pfx = informix_injitv_rec.itv_ref_pfx) AND (informix_injitd_rec.itd_cmpy_id = informix_injitv_rec.itv_cmpy_id)) INNER JOIN informix_ipjtrh_rec ON (informix_injitv_rec.itv_actvy_dt = informix_ipjtrh_rec.trh_actvy_dt) AND (informix_injitv_rec.itv_ref_sbitm = informix_ipjtrh_rec.trh_ref_sbitm) AND (informix_injitv_rec.itv_ref_itm = informix_ipjtrh_rec.trh_ref_itm) AND (informix_injitv_rec.itv_ref_no = informix_ipjtrh_rec.trh_ref_no) AND (informix_injitv_rec.itv_ref_pfx = informix_ipjtrh_rec.trh_ref_pfx) AND (informix_injitv_rec.itv_cmpy_id = informix_ipjtrh_rec.trh_cmpy_id)) INNER JOIN informix_ipjsoh_rec ON (informix_ipjtrh_rec.trh_jbs_no = informix_ipjsoh_rec.soh_jbs_no) AND (informix_ipjtrh_rec.trh_jbs_pfx = informix_ipjsoh_rec.soh_jbs_pfx) AND (informix_ipjtrh_rec.trh_cmpy_id = informix_ipjsoh_rec.soh_cmpy_id)) INNER JOIN informix_sahstn_rec ON (informix_ipjsoh_rec.soh_ord_sitm = informix_sahstn_rec.stn_ord_rls_no) AND (informix_ipjsoh_rec.soh_ord_itm = informix_sahstn_rec.stn_ord_itm) AND (informix_ipjsoh_rec.soh_ord_no = informix_sahstn_rec.stn_ord_no) AND (informix_ipjsoh_rec.soh_ord_pfx = informix_sahstn_rec.stn_ord_pfx) AND (informix_ipjsoh_rec.soh_cmpy_id = informix_sahstn_rec.stn_cmpy_id)) ON (informix_inrcsp_rec.csp_bgt_for_cus_id = informix_sahstn_rec.stn_sld_cus_id) AND (informix_inrcsp_rec.csp_bgt_for_cus_id = informix_injitd_rec.itd_bgt_for_id) AND (informix_inrcsp_rec.csp_std_lgth = informix_injitd_rec.itd_lgth) AND (informix_inrcsp_rec.csp_std_wdth = informix_injitd_rec.itd_wdth) AND (informix_inrcsp_rec.csp_fnsh = informix_injitd_rec.itd_fnsh) AND (informix_inrcsp_rec.csp_size = informix_injitd_rec.itd_size) AND (informix_inrcsp_rec.csp_grd = informix_injitd_rec.itd_grd) AND (informix_inrcsp_rec.csp_frm = informix_injitd_rec.itd_frm) AND (informix_inrcsp_rec.csp_cmpy_id = informix_injitd_rec.itd_cmpy_id)
WHERE (((informix_injitd_rec.itd_cmpy_id)="OBS") AND ((informix_injitd_rec.itd_bgt_for)="C") AND ((informix_injitd_rec.itd_ref_pfx)="IP") AND ((informix_injitv_rec.itv_trs_wgt)<0) AND (Not (informix_inrcsp_rec.csp_bgt_for_cus_id) Is Null) AND ((informix_inrcsp_rec.csp_gnrt_std_prd) Like "0") AND ((informix_injitd_rec.itd_ord_ffm)=" 0000000000000"));