我正在尝试为以下查询找到更好的解决方案,这需要几秒钟才能运行,并且向其添加 TOP 会增加执行时间。
SET STATISTICS TIME ON;
DECLARE @firstTerm NVARCHAR(255);
DECLARE @lastTerm NVARCHAR(255);
DECLARE @totalKeywords INT;
SET @firstTerm = 'john';
SET @lastTerm = 'doe';
SET @totalKeywords=2;
SELECT 20 AS [Priority], clientid AS ClientId
FROM clients.dbo.ViewClientsByFullname WITH (NOLOCK)
WHERE @totalKeywords > 1 AND fullname IN (
SELECT COALESCE(ParentName + ' ','') + @lastTerm AS Name
FROM dbo.DiminuitiveNames WITH (NOLOCK)
WHERE Name=@firstTerm OR ParentName=@firstTerm
UNION
SELECT COALESCE(Name + ' ','') + @lastTerm AS Name
FROM dbo.DiminuitiveNames WITH (NOLOCK)
WHERE ParentName IN (
SELECT ParentName
FROM dbo.DiminuitiveNames WITH (NOLOCK)
WHERE Name=@firstTerm OR ParentName=@firstTerm
)
)
该查询基本上是检查一个表中的备用名称列表(例如,@firstTerm=Robert 然后它还获取一个 bob、bobby、rob 等列表),然后也对这些备用名称进行搜索。
我试图想办法用 INNER JOIN 来做到这一点,但当时被难住了。