Hi, I am having a problem with my sql query. I am not sure why it is so slow after I add a between or >= comparison on the load date of my sql. The query I have created below returns between 3500 - 6000 records, that I use to populate a listbox rowsource. I want to allow the user to filter the returned data by date if they wish to, or find the related records that are in between two values selected by the user. When I add a " [loadDate] between #05/01/2006# AND #09/20/2006# " it takes an extra 5 minutes to display the data. If I don't add that condition the query runs quite fast and almost without any delays.
Original query:
Code that I use to populate my listbox
Original query:
Code:
SELECT tbl_Job.jobId, tbl_Load.loadId, tblLdHist.loadHistId, tblDispHist.dispatchId, tblDispHist.dispatchHistId, tbl_Company.companyId AS companyId, tbl_Company.companyName AS Company, tbl_Job.careOfCompanyId, tbl_Company_1.companyName AS COCompany, [contactFirstName] & IIf(IsNull([contactLastName]) Or [contactLastName]="",""," ") & [contactLastName] AS [Job Cont], tbl_Contact.contactPrimaryPhone AS [Cont Phone], tbl_LoadLoadUnload.loadLoadDate AS [Load Date], tbl_LoadLoadUnload.loadUnloadDate AS [Unload Date], join_tbl_Load_JobCommodity.loadCommodityOriginLocation AS [Origin Location], join_tbl_Load_JobCommodity.loadCommodityDestinationLocation AS [Destination Location], tbl_Commodity.commodityName & IIf(nz([commoditySerialNum],'')='','','(S/N:' & [commoditySerialNum] & ')') & IIf(nz([commodityUnitNum],'')='','',' - ' & [commodityUnitNum]) & IIf(nz([commodityCurrentLSD],'')='','',' - ' & [commodityCurrentLSD]) AS commodity, tbl_CommodityType.commodityType, tblLdHist.invoiceId, tblDispHist.invoiceId, tblLdHist.loadHistDescription, tblDispHist.dispatchHistDescription, tblDispHist.dispatchHistUsingUnitNum, tblLdHist.trailerCombinationType, tblLdHist.loadHistType
FROM tbl_LoadLoadUnload RIGHT JOIN ((((tbl_Contact RIGHT JOIN (tbl_Company AS tbl_Company_1 RIGHT JOIN (tbl_Company RIGHT JOIN tbl_Job ON tbl_Company.companyId = tbl_Job.companyId) ON tbl_Company_1.companyId = tbl_Job.careOfCompanyId) ON tbl_Contact.contactId = tbl_Job.jobContactId) LEFT JOIN (tbl_Load LEFT JOIN tbl_LoadHist AS tblLdHist ON (tbl_Load.jobId = tblLdHist.jobId) AND (tbl_Load.loadId = tblLdHist.loadId)) ON tbl_Job.jobId = tbl_Load.jobId) LEFT JOIN (join_tbl_Load_JobCommodity RIGHT JOIN ((tbl_Commodity LEFT JOIN tbl_CommodityType ON tbl_Commodity.commodityTypeId = tbl_CommodityType.commodityTypeId) RIGHT JOIN join_tbl_LoadCommodity_LoadUnload ON tbl_Commodity.commodityId = join_tbl_LoadCommodity_LoadUnload.commodityId) ON (join_tbl_Load_JobCommodity.jobId = join_tbl_LoadCommodity_LoadUnload.jobId) AND (join_tbl_Load_JobCommodity.loadId = join_tbl_LoadCommodity_LoadUnload.loadId) AND (join_tbl_Load_JobCommodity.commodityId = join_tbl_LoadCommodity_LoadUnload.commodityId)) ON (tblLdHist.jobId = join_tbl_LoadCommodity_LoadUnload.jobId) AND (tblLdHist.loadId = join_tbl_LoadCommodity_LoadUnload.loadId) AND (tblLdHist.loadHistId = join_tbl_LoadCommodity_LoadUnload.loadHistId)) LEFT JOIN (tbl_Dispatch AS tblDisp LEFT JOIN tbl_DispatchHist AS tblDispHist ON (tblDisp.jobId = tblDispHist.jobId) AND (tblDisp.loadId = tblDispHist.loadId) AND (tblDisp.loadHistId = tblDispHist.loadHistId) AND (tblDisp.dispatchId = tblDispHist.dispatchId)) ON (tblLdHist.jobId = tblDisp.jobId) AND (tblLdHist.loadId = tblDisp.loadId) AND (tblLdHist.loadHistId = tblDisp.loadHistId)) ON tbl_LoadLoadUnload.loadLoadUnloadId = join_tbl_LoadCommodity_LoadUnload.loadLoadUnloadId
ORDER BY tbl_Job.jobId DESC , IIf(IsNull(tbl_load.loadId),Null,CInt(tbl_load.loadId)) DESC , IIf(IsNull(tblLdHist.loadHistId),Null,CInt(tblLdHist.loadHistId)) DESC , tbl_Company.companyName, tbl_Company_1.companyName, tbl_LoadLoadUnload.loadLoadDate, tbl_LoadLoadUnload.loadUnloadDate, IIf(IsNull(tbldisp.dispatchId),Null,CInt(tbldisp.dispatchId)) DESC , IIf(IsNull(tblDispHist.dispatchHistId),Null,CInt(tblDispHist.dispatchHistId)) DESC;
Code that I use to populate my listbox
Code:
Select * from qrySearchListLoad where [Load Date] >= #09/20/2006# AND ((dispatchId)='01' Or (dispatchId) Is Null) AND ((dispatchHistId)='01' Or (dispatchHistId) Is Null)