如何在给定文本中加快搜索许多不同的关键字



>我正在寻找几个关键字的外观,这些关键字存储在名为"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 

如果不用游标也可以做同样的事情,则应避免使用游标。它很慢,它是一个迭代的解决方案。在您的情况下,您在这里不需要任何光标,因为您可以直接从表中选择

IF EXISTS(SELECT * FROM EmailKeyword
WHERE PATINDEX('%' + Searchword + '%', @Searchtext)) > 1)
SELECT 1 as SResult ELSE SELECT 0 as SResult 

您可以将存储过程的主体简化为:

SELECT @Found = COUNT(*)
FROM EmailKeywords
WHERE PATINDEX('%' + Searchword + '%', @Searchtext) > 0;
SELECT CASE WHEN @Found > 0 THEN 1 ELSE 0 END AS Result;

最新更新