مشکل با سرعت بسیار کند اجرای کوئری
سلام به همه دوستان
من یه کوئری دارم که باید داخل یک جدول نمایندگی هایی رو که از یه حدی بیشتر رکورد دارند رو از چند تا فیلداشون معدل بگیرم
و بعد چنتا فیلد از مشخصات نمایندگی رو هم بهش میچسبونه و خروجی میده
select
((avg(Rawdata.Q1 )-1)*250) as Q1, ((avg(Rawdata.Q2 )-1)*250) as Q2,
((avg(Rawdata.Q3 )-1)*250) as Q3, ((avg(Rawdata.Q4 )-1)*250) as Q4,
((avg(Rawdata.Q5 )-1)*250) as Q5, ((avg(Rawdata.Q6 )-1)*250) as Q6,
((avg(Rawdata.Q7 )-1)*250) as Q7, ((avg(Rawdata.Q8 )-1)*250) as Q8,
((avg(Rawdata.Q9 )-1)*250) as Q9, ((avg(Rawdata.Q10 )-1)*250) as Q10,
((avg(Rawdata.Q11 )-1)*250) as Q11, ((avg(Rawdata.Q12 )-1)*250) as Q12,
((avg(Rawdata.Q13 )-1)*250) as Q13, ((avg(Rawdata.Q18 )-1)*250) as Q18,
Count(*) as cntr,rawdata.Bcode2,
Companies.BCode, Companies.BranchName, Companies.Ostan, Companies.city, Companies.GTP
from rawdata , Companies
where rawdata.Bcode2 in (select Bcode2 from Rawdata Group by BCode2 Having Count(*)<10)
GROUP BY Rawdata.BCode2, Companies.BCode, Companies.BranchName, Companies.Ostan, Companies.city, Companies.GTP
مشکل اصلی افت سرعت و حتی هنگ در قسمتی هست که کد نمایندگی رو توی جدولی که از شمارش رکورد ها جستجومی کنه اتفاق میافته که نمیدونم چجوری حلش کنم ؟
where rawdata.Bcode2 in (select Bcode2 from Rawdata Group by BCode2 Having Count(*)<10)
آیا با Inner Join میشه چیزی ساخت که جایگزین این بشه ؟
نقل قول: مشکل با سرعت بسیار کند اجرای کوئری
شاید بگید خیلی پیچیدش کردم
ولی اون خطی که گفتم سرعت رو پایین میاره حذف کردم و کد رو به شکل زیر تغییر دادم ولی بازم همون مشکل سرعت:
/* ALIAS: rasool */
select
((avg(Rawdata.Q1 )-1)*250) as Q1, ((avg(Rawdata.Q2 )-1)*250) as Q2,
((avg(Rawdata.Q3 )-1)*250) as Q3, ((avg(Rawdata.Q4 )-1)*250) as Q4,
((avg(Rawdata.Q5 )-1)*250) as Q5, ((avg(Rawdata.Q6 )-1)*250) as Q6,
((avg(Rawdata.Q7 )-1)*250) as Q7, ((avg(Rawdata.Q8 )-1)*250) as Q8,
((avg(Rawdata.Q9 )-1)*250) as Q9, ((avg(Rawdata.Q10 )-1)*250) as Q10,
((avg(Rawdata.Q11 )-1)*250) as Q11, ((avg(Rawdata.Q12 )-1)*250) as Q12,
((avg(Rawdata.Q13 )-1)*250) as Q13, ((avg(Rawdata.Q18 )-1)*250) as Q18,
Count(*) as cntr,rawdata.Bcode2,
Companies.BCode, Companies.BranchName, Companies.Ostan, Companies.city, Companies.GTP
from rawdata , Companies
GROUP BY Rawdata.BCode2, Companies.BCode, Companies.BranchName, Companies.Ostan, Companies.city, Companies.GTP
Having Count(*)<10
نقل قول: مشکل با سرعت بسیار کند اجرای کوئری
اگر این سوال مربوط میشه به Microsoft SQL Server می تونید آن را در تالار SQL Server مطرح کنید تا دوستان مدیر کمک و راهنمایی کنند.
نقل قول: مشکل با سرعت بسیار کند اجرای کوئری
متأسفانه برای چندمین بار سؤال من بدون جواب موند
البته در مورد برخی دوستان دیگه هم اتفاق افتاده ولی فکر میکنم بد هم نباشه چون باز هم سبب شد خودم بیشتر روش کار کنم و مشکلم رو حل کنم
در مورد شما که میگید توی بخش خودش مطرح کنم باید بگم من مطرح کردم کوئری و چندان ربطی نداره که دیتابیس من از چه نوعی هست چون کوئری هست سوال کلیت داره و ساختار کوئری من مورد بحث بود نه پایگاه داده
به هر حال خودم حلش کردم
کدش رو میذارم برای کسانی که ممکنه همین مشکل رو داشته باشن
select
((avg(Rawdata.Q1 )-1)*250) as Q1, ((avg(Rawdata.Q2 )-1)*250) as Q2,
((avg(Rawdata.Q3 )-1)*250) as Q3, ((avg(Rawdata.Q4 )-1)*250) as Q4,
((avg(Rawdata.Q5 )-1)*250) as Q5, ((avg(Rawdata.Q6 )-1)*250) as Q6,
((avg(Rawdata.Q7 )-1)*250) as Q7, ((avg(Rawdata.Q8 )-1)*250) as Q8,
((avg(Rawdata.Q9 )-1)*250) as Q9, ((avg(Rawdata.Q10 )-1)*250) as Q10,
((avg(Rawdata.Q11 )-1)*250) as Q11, ((avg(Rawdata.Q12 )-1)*250) as Q12,
((avg(Rawdata.Q13 )-1)*250) as Q13, ((avg(Rawdata.Q18 )-1)*250) as Q18,
Count(*) AS cntr, rawdata.Bcode2,
Companies.BCode, Companies.BranchName,Companies.city, Companies.GTP,Companies.RKOLD,Rawdata.Ostan
FROM rawdata INNER JOIN companies ON Rawdata.Bcode2=Companies.Bcode2
GROUP BY Rawdata.BCode2, Companies.BCode, Companies.BranchName,Companies.city, Companies.GTP,Companies.RKOLD,Rawdata.Ostan
HAVING Count(*)>10;
در حقیقت من بجای استفاده از Inner Join خودم اون رو دستی پیاده سازی کرده بودم که با مشکل افت سرعت مواجه شده بودم
بعنوان تجربه عرض کنم اگر شما با بهترین روش هم دستورات SQL رو پیاده سازی کنید باز هم 1 دهم سرعت اجرای دستور معادلش توی DBM رو نخواهید داشت
نقل قول: مشکل با سرعت بسیار کند اجرای کوئری
bale doste aziz ,shoma dar query aval aslan join nazadid va dar vaghe cross join kardid ke mosalame be shedat ofte sorat khahid dasht