This query requires a lot of tables because I'm giving the user a LOT of flexibility with optional parameters. Everything is working fine except I added four more tables/parameters to the end of the query (Producer, ExecProducer, Director, Contact) and it has caused a huge jump in the time to run the query (20x)! I have joined the tables on primary keys that are indexed- there are about 20k-40k records in each of the tables, so it's not huge. Any suggestions for optimizing the query?
Code:
SELECT AG.AGProjectKey, AG.ProjectTitle, AG.ProdOfficeAddr1, AG.ProdOfficeAddr2, AG.ProdOfficeAddr3,
AG.ProdOfficeCity, AG.ProdOfficeState, AG.ProdOfficeZip, AG.ProdOfficeFax, AG.ProdOfficePhone,
AG.ClosedProject, AG.ClosedDate, AG.MusicSupervisor, AG.Location, AG.ProdStartDate,
AG.WrapShootDate, AG.SpottingDate, AG.RecordingDate, AG.MixingDate, AG.DeliveryDate,
AG.ReleaseDate, AG.FinalDub, AG.FilmTVBudget, AG.Network,AG.MusicBudget, AG.Synopsis,
AG.ProjectStatus, AG.NonClientFinalOut, C.ClientNumber AS [ClientKey], C.FirstName AS CLFirstName,
C.LastName AS CLLastName,
A.AgentKey, A.AgentName, PCo.ProductionCompanyDesc,
PCo1.ProductionCompanyDesc AS CoProdCompany, PT.ProjectTypeKey, PT.ProjectTypeDesc,
P2.ProjectType2Key, P2.ProjectType2Desc, PSrc.Source, G.GenreDesc, PS.ProductionStatusDesc
FROM tAGProjects AG
LEFT JOIN tProjectClients PC ON AG.AGProjectKey = PC.AGProjectKey
LEFT JOIN tClients C ON PC.ClientKey = C.ClientNumber
LEFT JOIN tProductionCompanies PCo ON AG.ProductionCompanyKey = PCo.ProductionCompanyKey
LEFT JOIN tProductionCompanies PCo1 ON AG.CoProductionCompanyKey = PCo1.ProductionCompanyKey
LEFT JOIN tProjectTypes PT ON AG.ProjectTypeKey = PT.ProjectTypeKey
LEFT JOIN tProjectType2s P2 ON AG.Type2Key = P2.ProjectType2Key
LEFT JOIN tGenre G ON AG.GenreKey = G.GenreKey
LEFT JOIN tProductionStatus PS ON AG.ProductionStatusKey = PS.ProductionStatusKey
LEFT JOIN tProjectAgents PA ON AG.AGProjectKey = PA.AGProjectKey JOIN tAgents A ON PA.AgentKey = A.AgentKey
LEFT JOIN tProjectSources PSrc ON AG.AGProjectKey = PSrc.AGProjectKey
LEFT JOIN tProjectProducers PP ON AG.AGProjectKey = PP.AGProjectKey
--These four tables cause the query to take 20 x's longer!
LEFT JOIN tProjectExecProducers PEx ON AG.AGProjectKey = PEx.AGProjectKey
LEFT JOIN tProjectDirectors PDr ON AG.AGProjectKey = PDr.AGProjectKey
LEFT JOIN tProjectContacts PCn ON AG.AGProjectKey = PCn.AGProjectKey
LEFT JOIN tProjectCast PCa ON AG.AGProjectKey = PCa.AGProjectKey
WHERE AG.ClosedProject = 0 AND A.AgentKey = 2
ORDER BY AG.ProjectTitle ASC