This is all new to me, (sql) and now I am trying to read up on how to make Selects more efficent and faster.This is one of my main statements that takes most of the time (68%)SELECT CONVERT(varchar(4),HDR.MarketingClockNumber), HDR.PlantNumber, HDR.QuoteNumber, HDR.EffectiveStartDate, HDR.CustomerNumber, HDR.CustomerName, (ITM.NetUnitPrice + SUM(ISNULL(ITX.Adder, 0))) * ITM.Quantity * ITM.DiscountMultiplier AS QuoteNetValue, HDR.YourInquiry, ITM.LineItem FROM DataWarehouse.dbo.QuoteHDR HDR LEFT OUTER JOIN DataWarehouse.dbo.QuoteITM ITM ON HDR.PlantNumber = ITM.PlantNumber AND HDR.QuoteNumber = ITM.QuoteNumber LEFT OUTER JOIN DataWarehouse.dbo.QuoteITX ITX ON HDR.PlantNumber = ITX.PlantNumber AND HDR.QuoteNumber = ITX.QuoteNumber AND ITM.LineItem = ITX.ItemNumber WHERE (HDR.PlantNumber = '12' OR HDR.PlantNumber = '18' OR HDR.PlantNumber = '19' OR HDR.PlantNumber = '22' OR HDR.PlantNumber = '23') AND (ITX.PlantNumber = '12' OR ITX.PlantNumber = '18' OR ITX.PlantNumber = '19' OR ITX.PlantNumber = '22' OR ITX.PlantNumber = '23') AND (ITX.PlantNumber = '12' OR ITM.PlantNumber = '18' OR ITM.PlantNumber = '19' OR ITM.PlantNumber = '22' OR ITM.PlantNumber = '23') AND (HDR.EffectiveStartDate BETWEEN CONVERT(DATETIME, '2004-10-25 00:00:00', 102) AND CONVERT(DATETIME, '2005-6-30 00:00:00', 102)) AND (HDR.QuoteNumber NOT IN (SELECT QuoteNumber FROM QuoteFeedback.dbo.QuoteTracking ) ) GROUP BY HDR.MarketingClockNumber, HDR.PlantNumber, HDR.QuoteNumber, HDR.EffectiveStartDate, HDR.CustomerNumber, HDR.CustomerName, HDR.YourInquiry, ITM.DiscountMultiplier, ITM.Quantity, ITM.LineItem, ITM.NetUnitPrice
For indexes, i have clustered, Plant Number, QuoteNumber, and LineItem. Here is the Execution Plan.
QuoteHDR has 0.2 MillionQuoteITM has 0.5 MillionQuoteITX has 1.5 Million