PDA

View Full Version : بهینه سازی پرفرمنس query



benyaminrahimi
سه شنبه 10 دی 1392, 10:18 صبح
میخاستم بدونم در کوعری هایی که مثلا دو بار تابع sum در یک عبارت مشخص صدا زده میشن . یک بار این عملیان اجرا میشه یا به تعداد فراخوانی ؟

اگر به تعداد فرا خونی اجرا میشن به نطرتون چطوری میشه این هزینه زمانی رو کاهش داد .
خودم به فکرم رسید که مثلا این جمع رو در یک ویو در نظر بگیرم و بعد در پر وسیجر کالش کنم ...
شما چطور فکر میکنید


SELECT LEFT(vw_acc_alls.hesab_cod, @tool) AS hcod,
ISNULL(SUM(vw_acc_alls.bed), 0) AS sm_bed,
ISNULL(SUM(vw_acc_alls.bes), 0) AS sm_bes,
CASE
WHEN (
ISNULL(SUM(vw_acc_alls.bed), 0) -
ISNULL(SUM(vw_acc_alls.bes), 0)
)
>= 0 THEN (
ISNULL(SUM(vw_acc_alls.bed), 0) -
ISNULL(SUM(vw_acc_alls.bes), 0)
)
ELSE 0
END AS mbed,
CASE
WHEN (
ISNULL(SUM(vw_acc_alls.bed), 0) -
ISNULL(SUM(vw_acc_alls.bes), 0)
)
<= 0 THEN ABS(
ISNULL(SUM(vw_acc_alls.bed), 0) -
ISNULL(SUM(vw_acc_alls.bes), 0)
)
ELSE 0
END AS mbes
FROM vw_acc_alls
WHERE (vw_acc_alls .dore_id = @dore_id)
AND (tarikh >= @az)
AND (tarikh <= @ta)
AND (m1c LIKE @mcod OR m2c LIKE @mcod OR m3c LIKE @mcod)
GROUP BY
LEFT(vw_acc_alls.hesab_cod, @tool)
HAVING LEN(LEFT(vw_acc_alls.hesab_cod, @tool)) = @tool

tooraj_azizi_1035
شنبه 21 دی 1392, 15:23 عصر
سلام
می تونید با فعال کردن دکمه Include Actual Execution Plan یا Ctrl+M کوئری رو اجرا و پلن اجرای اون رو ببینید و از تعداد SUM اجرا شده مطلع بشید. فکر می کنم آیکن Stream Aggregate باشه.
در شرط WHERE سعی کنید روی dore_id اندیس ایجاد کنید. از پلن اجراتون عکس بگیرید و قرار بدید.

N_D
یک شنبه 22 دی 1392, 14:35 عصر
اگه در یه ردیف باشند و یا در Having دیده بشن یکبار اجرا میشه( در این کودری که شما نوشتین یه بار اجرا میشه)

m.fazlali
سه شنبه 01 بهمن 1392, 18:10 عصر
برای در یافت جوابهای عملی و اجرایی به لینک زیر برو

http://sorterir.majikblog.com/BlogPostView.aspx?PostId=2123

starting
شنبه 05 بهمن 1392, 17:14 عصر
برای توابع تجمعی که دارای مشخصات یکسانی هستند تنها یکبار محاسبه و تجمیع صورت میگیره و فرقی نمی کنه که N بار ازش نام ببری یا 1 بار.
همانطور که گفته شد از Plan اجرای کوئری می تونی این موضوع رو بررسی کنی.

اما این کوئری که من میبینم به ظاهر که جا برای بازنویسی به شویه بهتر رو داره.

golbafan
یک شنبه 26 بهمن 1393, 09:43 صبح
نمیدونم سوالتو درست متوجه شدم یانه اما
بجای استفاده از دو تا sum میتونستی از یکی استفاده کنی

sum(x)-sum(y)=sum(x-y)