内连接中的Charindex影响性能

时间:2016-05-03 03:19:19

标签: sql 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数据类型。

我尝试拆分连接,但结果因分组而异。

如何重写此查询以使其更快?

1 个答案:

答案 0 :(得分: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.column以使其与A.column匹配。