Hi Team,Following query explains two approaches. Both of them took 19 seconds. Could you please list any scenario where the second approach will be faster than the first. (E.g. More number of record in first table or second table; Using other indexes; etc).What are the ways to optimize the second approach?CREATE TABLE #MainTable ( CustomerID INT PRIMARY KEY, FirstName VARCHAR(100) ) DECLARE @Count INTSET @Count = 0DECLARE @Iterator INTSET @Iterator = 0WHILE @Count <8000BEGIN INSERT INTO #MainTable SELECT @Count, 'Cust'+CONVERT(VARCHAR(10),@Count) SET @Count = @Count+1END CREATE TABLE #RightTable ( OrderID INT PRIMARY KEY, CustomerID INT, Product VARCHAR(100) ) CREATE INDEX [IDX_CustomerID] ON #RightTable (CustomerID)WHILE @Iterator <400000BEGIN IF @Iterator % 2 = 0 BEGIN INSERT INTO #RightTable SELECT @Iterator,2, 'Prod'+CONVERT(VARCHAR(10),@Iterator) END ELSE BEGIN INSERT INTO #RightTable SELECT @Iterator,1, 'Prod'+CONVERT(VARCHAR(10),@Iterator) ENDSET @Iterator = @Iterator+1END-- Approach 1: Using LEFT JOINSELECT mt.CustomerID,mt.FirstName,COUNT(rt.Product) [CountResult]FROM #MainTable mt LEFT JOIN #RightTable rt ON mt.CustomerID = rt.CustomerID GROUP BY mt.CustomerID,mt.FirstName----------------------------- Approach 2: Using Table variable UpdateDECLARE @WorkingTableVariable TABLE( CustomerID INT, FirstName VARCHAR(100), ProductCount INT ) INSERT INTO @WorkingTableVariable (CustomerID,FirstName)SELECT CustomerID, FirstName FROM #MainTable UPDATE @WorkingTableVariable SET ProductCount = [Count]FROM @WorkingTableVariable wt INNER JOIN (SELECT CustomerID,COUNT(rt.Product) AS [Count] FROM #RightTable rt GROUP BY CustomerID) IV ON wt.CustomerID = IV.CustomerID SELECT CustomerID,FirstName, ISNULL(ProductCount,0) [CountResult] FROM @WorkingTableVariable ORDER BY CustomerID--------DROP TABLE #MainTableDROP TABLE #RightTable
I hope, by some tuning the second approach will give better performance than the LEFT JOIN.Is there any different example that has the second approach working faster?ThanksLijo Cheeran Joseph