0

我正在寻找存储在名为“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 
4

2 回答 2

1

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

IF EXISTS(SELECT * FROM EmailKeyword
WHERE PATINDEX('%' + Searchword + '%', @Searchtext)) > 1)
SELECT 1 as SResult ELSE SELECT 0 as SResult 
于 2015-01-14T14:38:26.657 回答
0

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

SELECT @Found = COUNT(*)
FROM EmailKeywords
WHERE PATINDEX('%' + Searchword + '%', @Searchtext) > 0;

SELECT CASE WHEN @Found > 0 THEN 1 ELSE 0 END AS Result;
于 2015-01-14T14:39:15.997 回答