我有这个查询来检索作业的搜索数据(请参阅下文,简称为简单)。我们正在处理大约一百万条记录。使用大型表寻呼查询计算列检查性能
Select ID
from
(
Select ID,createDate
,SearchKeyMatchRank
,Row_Number() over(Order By createDate) As rowNumber
from Jobs J
OUTER APPLY
(
Select SearchKeyMatchRank=
CASE WHEN @searchKey='""' THEN 0
ELSE
(Select IsNull([RANK],0) from FREETEXTTABLE(Jobs,title,@searchKey) Where [Key]=J.ID)*4
+(Select IsNull([RANK],0) from FREETEXTTABLE(Jobs,description,@searchKey) Where [Key]=J.ID)*4
+(
select SUM(ISNULL(JS2.[Rank],0))
from FREETEXTTABLE(JobSkills,skill,@searchKey) JS2
Where JS2.[Key] in (Select ID from JobSkills Where jobId=J.Id)
)*2
END
) SMR
Where
SearchKeyMatchRank>0 --simplified here
) T2
where
rowNumber>=CASE WHEN @startIndex>0 AND @endIndex>0 THEN @startIndex ELSE rowNumber END
AND rowNumber<=CASE WHEN @startIndex>0 AND @endIndex>0 THEN @endIndex ELSE rowNumber END
注:
我不能使用常规的加入,因为我需要通过传递来的jobId至REETEXTTABLE找到加权行列。
问题:
它的极其缓慢。
显然问题是比较一个计算列。
SearchKeyMatchRank>0
如果我起飞 凡SearchKeyMatchRank> 0 它需要较少的再进行第二次。
有人知道我们如何才能改善这一点吗?
我们不能将其更改为常规列,因为我们必须根据搜索关键字来动态计算加权排名。 – manik