2017-05-31 47 views
0

我有SQL請求,需要很多時間來執行,任何建議,使其更快?SQL請求。如何讓它工作更快?

DECLARE @Today DATETIME; 
DECLARE @TwoWeeksAgo 
DATETIME; SET @Today = GETDATE(); 
SET @TwoWeeksAgo = DATEADD(DAY, -14, GETDATE()); 
SELECT TOP ${selectSalesByMall} s.title, s.imageUrl, count(sv.saleid) as mostViewPeriod14Days, s.guid, br.title as brand, s.id as saleId, stm.mallId 
FROM dbo.Sales s 
INNER JOIN dbo.KEY_BrandcategoryToSale b_key ON s.id = b_key.saleId 
INNER JOIN dbo.Brands br ON s.BrandId = br.Id 
INNER JOIN dbo.SaleView sv ON s.id = sv.saleId 
INNER JOIN dbo.SalesToMall stm ON s.id = stm.saleId 
LEFT JOIN dbo.SaleView sv2 on sv2.id = sv.id and sv2.userId = ${user['userID']} 
WHERE sv.Date 
BETWEEN @TwoWeeksAgo 
AND @Today 
AND sv2.id IS NULL 
AND s.isActive = 1 
AND stm.mallId = ${user['mallId']} 
AND br.id != ${user['favBrand']['brandId']} 
AND s.id NOT IN (SELECT uess.saleID FROM dbo.UsersEmailsSalesSent uess WHERE uess.userID = ${user['userID']}) 
GROUP BY s.title, s.imageUrl, s.guid, br.title, s.id, stm.mallId 
ORDER BY mostViewPeriod14Days DESC 
+0

是否有適當的索引?向我們展示執行計劃:) –

+0

我正在使用mac os x。我沒有這樣的工具。 –

+0

你用什麼GUI? –

回答

1

一個改進可以改變「不」「不存在」:

DECLARE @Today DATETIME; 
DECLARE @TwoWeeksAgo 
DATETIME; SET @Today = GETDATE(); 
SET @TwoWeeksAgo = DATEADD(DAY, -14, GETDATE()); 
SELECT TOP ${selectSalesByMall} s.title, s.imageUrl, count(sv.saleid) as mostViewPeriod14Days, s.guid, br.title as brand, s.id as saleId, stm.mallId 
FROM dbo.Sales s 
INNER JOIN dbo.KEY_BrandcategoryToSale b_key ON s.id = b_key.saleId 
INNER JOIN dbo.Brands br ON s.BrandId = br.Id 
INNER JOIN dbo.SaleView sv ON s.id = sv.saleId 
INNER JOIN dbo.SalesToMall stm ON s.id = stm.saleId 
LEFT JOIN dbo.SaleView sv2 on sv2.id = sv.id and sv2.userId = ${user['userID']} 
WHERE sv.Date 
BETWEEN @TwoWeeksAgo 
AND @Today 
AND sv2.id IS NULL 
AND s.isActive = 1 
AND stm.mallId = ${user['mallId']} 
AND br.id != ${user['favBrand']['brandId']} 
AND 
NOT EXISTS (SELECT uess.saleID FROM dbo.UsersEmailsSalesSent uess WHERE uess.userID = ${user['userID']} and s.id=uess.saleID) 
GROUP BY s.title, s.imageUrl, s.guid, br.title, s.id, stm.mallId 
ORDER BY mostViewPeriod14Days DESC