powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отличие планов выполнения SELECT от EXEC
7 сообщений из 7, страница 1 из 1
Отличие планов выполнения SELECT от EXEC
    #40025877
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

У меня есть следующий запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DECLARE @startDate DATETIME ='2020-12-09T00:00:00',  @endDate DATETIME ='2020-12-09T23:59:59'

SELECT NEWID() AS Id
	    ,CONVERT(INT, f.FullNameFloor) AS PartnerId
	    ,s.TimeRecord AS DateReport
	    ,s.ID_Sensor AS CameraId
	    ,s.SumIn AS CounterIn
	    ,s.SumOut AS CounterOut
FROM PCOUNT.Read_City_Count_523.dbo.CM_StorageSensor AS s
INNER JOIN PCOUNT.Read_City_Count_523.dbo.CM_Controller AS c
    ON s.ID_Controller = c.ID_Controller
INNER JOIN PCOUNT.Read_City_Count_523.dbo.CM_Floor AS f
   ON c.ID_Floor = f.ID_Floor
WHERE ISNUMERIC(f.FullNameFloor) = 1 
	   AND s.TimeRecord BETWEEN @startDate AND @endDate



План его выполнения (см. Plan1.jpg).

Далее я выполнил этот запрос, только с помощью процедуры sys.sp_executesql , вот какой запрос я выполнил:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 DECLARE @startDate DATETIME ='2020-12-09T00:00:00',  @endDate DATETIME ='2020-12-09T23:59:59',
                        @commandString nvarchar(1000) ='SELECT
		   NEWID() AS Id
		   ,CONVERT(INT, f.FullNameFloor) AS PartnerId
		   ,s.TimeRecord AS DateReport
		   ,s.ID_Sensor AS CameraId
		   ,s.SumIn AS CounterIn
		   ,s.SumOut AS CounterOut
		FROM PCOUNT.Read_City_Count_523.dbo.CM_StorageSensor AS s
		INNER JOIN PCOUNT.Read_City_Count_523.dbo.CM_Controller AS c
			ON s.ID_Controller = c.ID_Controller
		INNER JOIN PCOUNT.Read_City_Count_523.dbo.CM_Floor AS f
			ON c.ID_Floor = f.ID_Floor
		WHERE ISNUMERIC(f.FullNameFloor) = 1 
		      AND s.TimeRecord BETWEEN @startDate AND @endDate'

  EXEC sys.sp_executesql @commandString,N'@startDate DATETIME, @endDate DATETIME', @startDate, @endDate



План его выполнения (см. Plan2.jpg).

Вопрос: почему планы отличаются?
...
Рейтинг: 0 / 0
Отличие планов выполнения SELECT от EXEC
    #40025878
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASukhov1986,
Вот план второго запроса
...
Рейтинг: 0 / 0
Отличие планов выполнения SELECT от EXEC
    #40025892
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если попробовать даты литералами подставить и туда и туда - будет разница? И кеш планов почистить перед выполнением.
...
Рейтинг: 0 / 0
Отличие планов выполнения SELECT от EXEC
    #40025893
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
офф: почему бы для начала не научиться делать более компактные скриншоты ???
...
Рейтинг: 0 / 0
Отличие планов выполнения SELECT от EXEC
    #40026265
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASukhov1986,

динамические процедуры компилируются каждый раз при выполнении.
...
Рейтинг: 0 / 0
Отличие планов выполнения SELECT от EXEC
    #40026281
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASukhov1986
Вопрос: почему планы отличаются?
Читайте о "parameters sniffing".
Если к первому запросу добавите option (recompile) - получите одинаковые планы.
...
Рейтинг: 0 / 0
Отличие планов выполнения SELECT от EXEC
    #40026685
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, спасибо за ответ
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отличие планов выполнения SELECT от EXEC
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]