Каждый раз, когда вы используете запрос LIKE с подстановочным знаком в начале, например, '%starting balance%'
в вашем примере, вы уничтожаете способность оптимизатора использовать любые индексы для ускорения запроса.Так что, если вы можете быть уверены, что искомая ячейка начнется с «Стартовый баланс», вы можете удалить первый подстановочный знак и использовать любые индексы в столбце value
.
Говоря об индексах,Вы могли бы попытаться создать некоторые.Я не эксперт, но я бы попробовал один на value
и один для других 3 столбцов в вашем условии соединения (DocumentName
, SheetName
и RowNumber
), чтобы начать с.
При попытке определить причину медленного запроса, хорошим первым шагом будет запустить SQL:
SET IO STATISTICS ON
GO
в используемом вами окне запроса, а затем выполнить запрос.Также включите фактический план выполнения перед выполнением запроса.Как только запрос будет выполнен, вы сможете увидеть подробную статистику на вкладке «Сообщения» и захотите найти таблицы с действительно высоким логическим чтением, физическим чтением или количеством сканирований.Затем посмотрите, есть ли в плане выполнения дорогостоящие операции, работающие с этими таблицами, и посмотрите, есть ли способ повысить эффективность этой операции.
Последний совет при попытке выяснить, почему запросы выполняются медленно:Установите и используйте бесплатный инструмент SQL Sentry Plan Explorer , чтобы получить более подробное и полезное представление планов выполнения. sooo окажется гораздо более полезным, чем средство просмотра плана выполнения по умолчанию в SSMS.