SQL Server: что будет запускать план выполнения? - PullRequest
1 голос
/ 10 апреля 2011

Если у меня есть заявление

DECLARE @i INT;
DECLARE @d NUMERIC(9,3);
SET @i = 123;
SET @d = @i;
SELECT @d;

и я включаю фактический план выполнения и запускаю этот запрос, я не получаю план выполнения. Будет ли запрос запускать план выполнения только при наличии в пакете оператора FROM?

Ответы [ 4 ]

3 голосов
/ 10 апреля 2011

Простой ответ - вы не получаете планы выполнения без доступа к таблице.

Планы выполнения - это то, что создает оптимизатор: он разрабатывает наилучший способ удовлетворения запроса на основе индексов, статистики и т. Д.

То, что у вас есть выше, является тривиальным и не имеет доступа к таблице.Зачем вам нужен план?

Редактировать:

Производная таблица - это доступ к таблице в соответствии с примером Lucero в комментариях

Редактировать 2:

"Тривиально«Доступ к таблице дает постоянное сканирование, а не реальное сканирование или поиск:

  • SELECT * FROM sys.tables WHERE 1=0
  • Примеры Lucero в комментариях
1 голос
/ 10 апреля 2011

Да, вам нужен оператор from.

Вы можете сделать это

declare @i int
declare @d numeric(9,3)
set @i = 123

select @d = @i
from (select 1) as x(x)

select @d

И в плане выполнения вы видите это

<ScalarOperator ScalarString="CONVERT_IMPLICIT(numeric(9,3),[@i],0)">
1 голос
/ 10 апреля 2011

Я бы предположил, что план запроса генерируется всякий раз, когда необходимо выполнить операцию на основе набора.

1 голос
/ 10 апреля 2011

Что вы подразумеваете под тем, что вызовет план выполнения?Также я не понял, что я включаю фактический план выполнения и запускаю этот запрос, я не получаю план выполнения.Надеюсь, что эта ссылка может вам помочь.

  1. Учебник по настройке SQL - Понимание плана выполнения базы данных (1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...