我正在寻找一些关键词的外观,这些关键词存储在名为" EmailKeywords"的表中,在使用变量@Searchtext传递的搜索字符串中。我通过下面编写的存储过程实现了这一点,通常可以正常工作。但是要查找许多关键字,这需要花费很多时间,因为我已经使用每个关键字遍历搜索文本。
有人知道如何加快搜索速度吗?任何提示都是受欢迎的。
ALTER PROCEDURE BodyTextLookForKeywords
@Searchtext ntext
AS
DECLARE @Found int = 0
DECLARE @Keyword nvarchar(30)
-- Loop through all the listed key words
DECLARE SearchCursor Cursor For SELECT Searchword from EmailKeywords For Read Only
Open SearchCursor
While (0=0) Begin
Fetch Next
From SearchCursor
Into @Keyword
If (@@Fetch_Status <> 0)
Break
Else
Begin
Set @Found = (SELECT PATINDEX('%' + @Keyword+ '%', @Searchtext))
If @Found > 0 Break
End
End
Close SearchCursor
Deallocate SearchCursor
If @Found=0 select 0 as SResult else select 1 as SResult
答案 0 :(得分:1)
如果没有游标可以做同样的事情,你应该避免使用游标。 它很慢,它是一个迭代的解决方案。 在你的情况下,你不需要任何光标,因为你可以直接从表中选择
IF EXISTS(SELECT * FROM EmailKeyword
WHERE PATINDEX('%' + Searchword + '%', @Searchtext)) > 1)
SELECT 1 as SResult ELSE SELECT 0 as SResult
答案 1 :(得分:0)
您可以将存储过程的正文缩减为:
SELECT @Found = COUNT(*)
FROM EmailKeywords
WHERE PATINDEX('%' + Searchword + '%', @Searchtext) > 0;
SELECT CASE WHEN @Found > 0 THEN 1 ELSE 0 END AS Result;