আমার কাছে নিম্নলিখিত কোয়েরি রয়েছে এবং প্রচুর 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। কম / A / 59944426/12536284
যদি আপনি উপরের সমাধানটির সাথে একমত হন তবে দয়া করে আমাকে দেখান আমি কীভাবে এটি আমার বর্তমান ক্যোয়ারিতে প্রয়োগ করতে পারি?
শুধু এফওয়াইআই, আমি এই এসপি সি # তে ব্যবহার করছি, সত্তা ফ্রেমওয়ার্ক (ডিবি-ফার্স্ট), এরকম কিছু:
var result = MyDBEntities.CalculatorSP();
Execution Plan
। দয়া করে এটি পোস্ট করুন