2016-10-06 11 views
-1

非常に頻繁に実行される1つのクエリがありますが、列の両側で関数を使用しているため、インデックスシークは実行されていません。このクエリは、高価なクエリ。この列を計算可能にする方法はありますか? dfundakoさんのコメントに拡大すること計算フィールド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

は、次のような持続計算列にインデックスを作ることができます。

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), ''), ' ', '')