変数 @Searchtext で渡された検索文字列内で、「EmailKeywords」という名前のテーブルに格納されているいくつかのキーワードの出現を探しています。これは、以下に記述されたストアド プロシージャによって実現されましたが、通常は正常に動作します。しかし、検索するキーワードが多いと、すべてのキーワードで検索テキストをループする必要があるため、これにはかなりの時間がかかります。
この検索を高速化する方法を知っている人はいますか? どんなヒントでも大歓迎です。
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