با سلام
من یک کوئری دارم به شکل زیر
DECLARE @SDTE VARCHAR(10);
DECLARE @EDTE VARCHAR(10);
Declare @PRS Int
Set @PRS=44301
Set @SDTE='1400/01/01'
Set @EDTE='1400/01/31'
SELECT calen.calen_pk,
calen.shift_fk,
shift.shift_num,
calen.gadays_fk AS dte,
calen.calen_hld,
@PRS pers,
gadays.wek,
shift.shift_pk,
shift.shift_des,
goroh.goroh_pk,
goroh.goroh_num,
goroh.goroh_des,
sh_day.sh_days
FROM
gadays,
calen,
shift,
goroh,
sh_day
WHERE
gadays.DTE between @SDTE AND @EDTE
and dbo.get_shift(@PRS, gadays.dte) = calen.shift_fk
AND goroh_pk = dbo.get_goroh(@PRS, gadays.dte)
AND calen.gadays_fk = gadays.dte
AND shift.shift_pk = calen.shift_fk
AND sh_day.sh_day_pk = calen.sh_day_fk
کوئری بالا حدود 12 ثانیه زمان برای اجرا لازم داره
همین کوئری به شکل زیر
DECLARE @SDTE VARCHAR(10);
DECLARE @EDTE VARCHAR(10);
Declare @PRS Int
Set @PRS=44301
Set @SDTE='1400/01/01'
Set @EDTE='1400/01/31'
SELECT calen.calen_pk,
calen.shift_fk,
shift.shift_num,
calen.gadays_fk AS dte,
calen.calen_hld,
@PRS pers,
gadays.wek,
shift.shift_pk,
shift.shift_des,
goroh.goroh_pk,
goroh.goroh_num,
goroh.goroh_des,
sh_day.sh_days
FROM
gadays,
calen,
shift,
goroh,
sh_day
WHERE
gadays.DTE between '1400/01/01' AND '1400/01/31'
and dbo.get_shift(@PRS, gadays.dte) = calen.shift_fk
AND goroh_pk = dbo.get_goroh(@PRS, gadays.dte)
AND calen.gadays_fk = gadays.dte
AND shift.shift_pk = calen.shift_fk
AND sh_day.sh_day_pk = calen.sh_day_fk
کمتر از 1 ثانیه اجرا میشه
تنها تفاوتشون اینه در کوئری اول تاریخ به صورت متغیر ست شده در کوئری دوم مستقیم توی خود کوئری ست شده
علت چیه؟
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)