我的程序有以下查询,
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 :(得分: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匹配。