Улучшение производительности хранимых процедур - PullRequest
0 голосов
/ 01 октября 2019

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

where ([Code] in (select * from dbo.Split(',',@code)))

Есть 1170 значений, разделенных запятыми, которые возвращаются из функции dbo.Split, а столбец [Code] происходит из таблицы, состоящей изболее 6 миллионов строк. У меня есть индекс для столбца [Code] в моей таблице. Запрос выполняется около 10 минут.

Это нормально, что такой медленный результат или его можно улучшить? Спасибо.

1 Ответ

0 голосов
/ 01 октября 2019

Попробуйте использовать общее табличное выражение:

with cteCode 
as
(
   Select ColumnName --Avoid using *
   From dbo.Split(',',@code)
)
Select Col1, ColN
From MainTable mn
Where exists ( select top 1 1 
               from cteCode cc
               Where cc.ColumnName = mn.Code )

Дополнительные советы:

  • Проверьте на фрагментацию индексов, возможно, вам нужно провести их техническое обслуживание
  • Избегайте использования функций в предложении where

Удачи

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