使用计算字段T-SQL进行索引使用

时间:2016-10-06 20:23:15

标签: 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 个答案:

答案 0 :(得分: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), ''), ' ', '')