我需要一些帮助来优化以下查询:
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
使用正则表达式工作台代码。
但是,正如我所提到的 - 如果没有当前注释掉的行,它运行良好。
还有其他建议吗?