मेरे पास निम्न क्वेरी है, और बहुत सारे SUM
फ़ंक्शन कॉल के कारण, मेरी क्वेरी बहुत धीमी गति से चल रही है। मेरे डेटाबेस में बहुत सारे रिकॉर्ड हैं और मैं वर्तमान वर्ष और पिछले वर्ष (पिछले 30 दिन, अंतिम 90 दिन और पिछले 365 दिन) से प्रत्येक के लिए एक रिपोर्ट प्राप्त करना चाहूंगा:
SELECT
b.id as [ID]
,d.[Title] as [Title]
,e.Class as [Class]
,Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-1,GETDATE()) THEN a.col1 ELSE 0 END) as [Current - Last 30 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-1,GETDATE()) THEN a.col2 ELSE 0 END) as [Current - Last 30 Days Col2]
,Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-1,GETDATE()) THEN a.col1 ELSE 0 END) as [Current - Last 90 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-1,GETDATE()) THEN a.col2 ELSE 0 END) as [Current - Last 90 Days Col2]
,Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-1,GETDATE()) THEN a.col1 ELSE 0 END) as [Current - Last 365 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-1,GETDATE()) THEN a.col2 ELSE 0 END) as [Current - Last 365 Days Col2]
,Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-13,GETDATE()) and a.DateCol <= DATEADD(MONTH,-12,GETDATE()) THEN a.col1 ELSE 0 END) as [Last year - Last 30 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-13,GETDATE()) and a.DateCol <= DATEADD(MONTH,-12,GETDATE()) THEN a.col2 ELSE 0 END) as [Last year - Last 30 Days Col2]
,Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-5,GETDATE()) and a.DateCol <= DATEADD(QUARTER,-4,GETDATE()) THEN a.col1 ELSE 0 END) as [Last year - Last 90 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-5,GETDATE()) and a.DateCol <= DATEADD(QUARTER,-4,GETDATE()) THEN a.col2 ELSE 0 END) as [Last year - Last 90 Days Col2]
,Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-2,GETDATE()) and a.DateCol <= DATEADD(YEAR,-1,GETDATE()) THEN a.col1 ELSE 0 END) as [Last year - Last 365 Days Col1]
,Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-2,GETDATE()) and a.DateCol <= DATEADD(YEAR,-1,GETDATE()) THEN a.col2 ELSE 0 END) as [Last year - Last 365 Days Col2]
FROM
tb1 a
INNER JOIN
tb2 b on a.id=b.fid and a.col3 = b.col4
INNER JOIN
tb3 c on b.fid = c.col5
INNER JOIN
tb4 d on c.id = d.col6
INNER JOIN
tb5 e on c.col7 = e.id
GROUP BY
b.id, d.Title, e.Class
किसी को भी पता नहीं है कि मैं तेजी से चलाने के लिए अपनी क्वेरी कैसे सुधार सकता हूं?
संपादित करें: मुझे DATEADD
फ़ंक्शन कॉल को where
स्टेटमेंट में स्थानांतरित करने और पहले दो साल लोड करने के लिए प्रोत्साहित किया गया था, फिर उन्हें कॉलम में फ़िल्टर करें, लेकिन मुझे यकीन नहीं है कि सुझाए गए उत्तर को निष्पादित किया गया है और काम करता है, यह यहां पाया जा सकता है: https: // stackoverflow। com / एक / 59944426/12536284
यदि आप उपरोक्त समाधान से सहमत हैं, तो कृपया मुझे दिखाएं कि मैं इसे अपनी वर्तमान क्वेरी में कैसे लागू कर सकता हूं?
सिर्फ FYI करें, मैं इस SP का C #, Entity Framework (DB-First) में उपयोग कर रहा हूँ, कुछ इस प्रकार है:
var result = MyDBEntities.CalculatorSP();
Execution Plan
। कृपया इसे पोस्ट करें