Использование индекса с использованием вычислительного поля T-SQL

#tsql

#tsql

Вопрос:

У нас есть один запрос, который выполняется очень часто, но поскольку мы используем функцию с обеих сторон столбца, он не выполняет поиск по индексу, и этот запрос оказывается одним из самых дорогих запросов. Могу ли я каким-либо образом сделать этот столбец вычислительным?

 SELECT TOP 1 column1
FROM table1
WHERE replace(replace(replace(column2, char(10), ''), char(13), ''), ' ', '') =
      replace(replace(replace(@var1, char(10), ''), char(13), ''), ' ', '') 
  

Комментарии:

1. Создайте в таблице постоянный вычисляемый столбец и проиндексируйте его.

Ответ №1:

Чтобы расширить комментарий dfundako, вы можете создать индекс для сохраняемого вычисляемого столбца следующим образом:

 CREATE TABLE table1 (
    column1 INT,
    column2 VARCHAR(50),
    column3 AS REPLACE(replace(replace(column2, char(10), ''), char(13), ''), ' ', '') PERSISTED
)

CREATE INDEX index1 ON table1 (column3) INCLUDE (column1)

DECLARE @var1 VARCHAR(50)
SELECT column1 FROM dbo.table1 WHERE column3=replace(replace(replace(@var1, char(10), ''), char(13), ''), ' ', '')