Производительность SQL-запроса снижается при использовании параметра - PullRequest
0 голосов
/ 11 мая 2018

Это быстро:

SELECT * 
FROM [Assignable Assessors] 
WHERE ([Certificate Type ID] = 'TAA')

Но это медленно:

DECLARE @__targetLevel_4 AS nvarchar(8);
SET @__targetLevel_4 = 'TAA';

SELECT * 
FROM [Assignable Assessors] 
WHERE ([Certificate Type ID] = @__targetLevel_4)

Как это возможно?

[Assignable Assessor] - это представление, которое содержит"Последние записи группы выбираются.

[Certificate Type ID] имеет тип nvarchar(8), и в выборках нет явного преобразования типов.

Я использую базу данных SQL Azure.

1 Ответ

0 голосов
/ 11 мая 2018

То, что вы видите, - это возможность использовать определенное значение для просмотра статистики, чтобы создать план выполнения, когда вы используете жестко закодированное значение, «TAA».В отличие от этого, вы используете локальную переменную (не параметр), и поэтому вместо просмотра статистики по определенному количеству строк используется среднее число строк.Если вы поместите тот же код в хранимую процедуру, в которой вместо локальной переменной у вас будет параметр, то перехват параметров (выборка значения параметра и использование его по статистике) приведет к более точному плану.

Чтобы проверить все это, запишите планы выполнения для каждого из ваших запросов и посмотрите на количество строк.Затем сравните их со статистикой по соответствующему столбцу (или индексу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...