2016-05-03 7 views
0

に影響CHARINDEXは参加し、私は、クエリの下に持って手続きを持ってもパフォーマンス

Select 
a.column 
,count(distinct(c.column)) 
from `table1` a with (nolock) 
inner join `table2` b with(`nolock`) on a.id=b.id 
inner join `table3` c with (`nolock`) on charindex(c.colum,a.column)>0 
group by 
a.column 

TABLE1は、ほぼ36,000行を持っており、クエリが結果セットをロードするために、ほぼ40秒かかります。

a.columnにはftsインデックスがインストールされており、xmlデータ型です。

私は結合を分割しようとしましたが、結果はグループ化によって異なります。

このクエリをより高速にするには、どうすればこのクエリを書き直すことができますか?

答えて

0

ある列を比較/結合するときは、LIKEキーワードを使用する必要があります。 CHARINDEX、LEFTおよびRIGHT関数は、SQLサーバーが索引を使用できるようにしません。 C.columnがA.Columnであればどのようなあなたが求めているのは、
ソリューションです:
の代わり:

<CODE> 
    charindex(c.column,a.column)>0 
</CODE> 

使用

<CODE> 
    WHERE a.column LIKE '%' + c.column + '%' 
</CODE> 

また、Cを除去してみてください。 A.columnに一致するようにします。

関連する問題