次のクエリを最適化するための助けが必要です。
SELECT DISTINCT TOP (@NumberOfResultsRequested) dbo.FilterRecentSearchesTitles(OriginalSearchTerm) AS SearchTerms
FROM UserSearches
WHERE WebsiteID = @WebsiteID
AND LEN(OriginalSearchTerm) > 20
--AND dbo.FilterRecentSearchesTitles(OriginalSearchTerm) NOT IN (SELECT KeywordUrl FROM PopularSearchesBaseline WHERE WebsiteID = @WebsiteID)
GROUP BY OriginalSearchTerm, GeoID
コメントアウトされた行がなくても問題なく動作します。UserSearches.OriginalSearchTerm、WebsiteID、PopularSearchesBaseline.KeywordUrl にインデックスを設定していますが、この行が含まれているとクエリの実行が遅くなります。
-- UPDATE -- 使用される関数は次のとおりです。
ALTER FUNCTION [dbo].[FilterRecentSearchesTitles]
(
@SearchTerm VARCHAR(512)
)
RETURNS VARCHAR(512)
AS
BEGIN
DECLARE @Ret VARCHAR(512)
SET @Ret = dbo.RegexReplace('[0-9]', '', REPLACE(@SearchTerm, '__s', ''), 1, 1)
SET @Ret = dbo.RegexReplace('\.', '', @Ret, 1, 1)
SET @Ret = dbo.RegexReplace('\s{2,}', ' ', @Ret, 1, 1)
SET @Ret = dbo.RegexReplace('\sv\s', ' ', @Ret, 1, 1)
RETURN(@Ret)
END
Reglar Expression Workbenchコードの使用。
ただし、前述したように、現在コメントアウトされている行がなくても問題なく動作します。
他の提案はありますか?