2016-10-06 2 views
-1

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

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

Сделать сохраненное вычисляемый столбец на столе и индексировать. – dfundako

ответ

0

Чтобы расширить комментарий 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), ''), ' ', '') 
Смежные вопросы