Плохая производительность с запросом sp_prepexec по индексированным полям, почему? - PullRequest
0 голосов
/ 10 октября 2018

Я использую SQL Server 2012.

У меня есть таблица с 1 500 000 человек.В этой таблице у меня есть некластеризованное индексированное поле UR_ID.Приложение, с которым я работаю, выбирает данные из моей индивидуальной таблицы.Он использует следующий запрос:

declare @p5 int
exec sp_prepexec @p5 output,
N'@P1 nvarchar(4000),@P2 numeric(38,0),@P3 numeric(38,0)',
N'select a.INDIVIDUAL_ID as ID_OBJEC_1 
from dbo.INDIVIDUAL a 
where lower(a.UR_ID) like @P1 
and coalesce (a.FLD_DELETE, @P2 )= @P3 
order by a.LST_UPD_DT desc, a.INDIVIDUAL_ID asc',
N'1000004708691',0,0
select @p5

По сути, запрос просто переводит запрос из индексированного поля в первичный ключ записи.В этом примере '1000004708691' является искомым индексированным полем UR_ID.FLD_DELETE и LST_UPD_DT - другие поля в таблицах INDIVIDUAL.

Выполнение запроса занимает 04,76 секунды.Поскольку я диагностировал проблему с производительностью, я использовал следующий запрос, чтобы проверить, что было не так:

select a.INDIVIDUAL_ID as ID_OBJEC_1 
from dbo.INDIVIDUAL a 
where lower(a.UR_ID) like '1000004708691' 
and coalesce (a.FLD_DELETE, 0)= 0
order by a.LST_UPD_DT desc, a.INDIVIDUAL_ID asc

Выполнение запроса занимает 1,18 секунды.

Я не понимаю, почему с помощью sp_prepexec сделает запрос в 5 раз медленнее.Я также не понимаю, почему поиск по некластеризованным индексированным полям может занять до 1 секунды.

Как я могу улучшить производительность здесь?Чего мне не хватает?


Редактировать: Execution Plan of the Query

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