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

时间:2015-01-14 14:27:29

标签: sql-server tsql cursor full-text-search text-search

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

2 个答案:

答案 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;