Есть сложный запрос к большому количеству данных, который заливается в таблицу в уже обобщенном виде из нескольких десятков тысяч строк при 7 столбцах.
При отладке запроса в условии, где требуется указать дату я явно указывал период [date00] between '20190101' and '20190401', запускал выполнение скрипта и он примерно за две с половиной минуты отрабатывал.
Но когда я перешел на использование переменных, то время выполнения запроса непонятно возросло
declare @today date = '20190101'
declare @year datetime = (select cast(datename(yyyy, @today) as datetime))
declare @quarter int = datepart(quarter,@today)
declare @qbegin datetime = dateadd(QUARTER,@quarter-1,@year)
declare @qend datetime = dateadd(ss,-1,(dateadd(QUARTER,@quarter,@year)))
select @today,@year,@quarter,@qbegin,@qend
...
...and date00 between @qbegin and @qend--
Колонка [date00], по которой происходит фильтрация имеет формат datetime
Сначала думал, что может быть скрипт отрабатывает долго из-за первоначального расхождения в форматах данных (одна из переменных была просто date), но нет, привел все к единому виду, но запрос отрабатывает дольше, чем при явном указании дат. Почему?
Да, есть вариант обхода этой проблемы в использовании динамического sql, но все же непонятно, почему переменные так влияют на время выполнения скрипта.