У меня есть простое выражение select для CTE, в котором перед объявлением WITH были объявлены значения и значения SET, и я собираю данные за один день, в котором будет около 200 000 строк данных.Если я выполню этот запрос, он займет больше времени (не завершено за 10 минут).Но если я удаляю эти DECLARE, SET и жестко закодирую эти входные значения в условии WHERE, результаты отображаются в 15 СЕКУНДАХ.
В этой таблице содержится около 350 миллионов строк данных с надлежащей индексацией столбцов первичного ключа.
Что может быть причиной этой медленности?
Фактический запрос
DECLARE @StartTime DATETIME
DECLARE @EndTime DATETIME
DECLARE @ApplicationName VARCHAR(100)
SET @StartTime = '2018-12-10'
SET @EndTime = '2018-12-10'
SET @Applicationname = 'APPNAME'
;WITH TOTAL as (
SELECT * FROM TABLE WHERE DATETIME >= + @StartTime + '00:00:01' AND
DATETIME <= + @EndTime + '23:59:59'
AND APPLICATIONID=(SELECT APPLICATIONID FROM APPLICATION WHERE ApplicationName=@Applicationname
)
SELECT * FROM TOTAL
После изменения
SELECT * FROM TABLE WHERE DATETIME >= '2018-12-10 00:00:01' AND
DATETIME <= '2018-12-10 23:59:59'
AND APPLICATIONID=(SELECT APPLICATIONID FROM APPLICATION WHERE ApplicationName='APPNAME'
На самом деле у БД есть SP с длинным запросом, здесь я предоставил только первую таблицу CTE и те же условия таблицы, которые применимы ко всем остальным таблицам CTE.Если я получу подсказку об этой медлительности, я исправлю остальные запросы.