像SQL中的Query需要时间

时间:2016-12-21 09:00:32

标签: sql sql-server sql-server-2012

所以我环顾四周试图找到一些帖子,有很多 Like Query 1Like Query 2,但没有解决我的具体问题(我能找到)。

我有两张表,其中我有大约5000000条记录,我将从这些表中返回搜索结果:

    SELECT A.ContactFirstName, A.ContactLastName
    FROM   Customer.CustomerDetails AS A WITH (nolock)
    WHERE  (A.ContactFirstName + ' ' + A.ContactLastName LIKE '%' + 'a' + '%')
    UNION
    SELECT C.ContactFirstName, C.ContactLastName
    FROM   Customer.Contacts AS C WITH (nolock) 
    WHERE  (C.ContactFirstName + ' ' + C.ContactLastName LIKE '%' + 'a' + '%')

我的问题是需要大约1分钟才能执行。

对于上述查询,我​​期待结果如:

Expected Result

请建议我提高性能的最佳做法。提前谢谢。

注意:没有丢失索引。

2 个答案:

答案 0 :(得分:0)

当你使用" LIKE'%xxx%'"我认为你的查询速度慢的原因并没有使用索引。当你使用" LIKE' xxx%')"使用了索引(如果索引当然存在于列上。>你在concatenante列上做的其他问题,如果在这种情况下使用索引,我就不知道。为什么要使用&x; xxx' +& #39;' +' yyy'喜欢' z%',只需做' xxx'喜欢' z%'同样。您可以尝试像这样修改您的查询

SELECT A.ContactFirstName, A.ContactLastName
FROM   Customer.CustomerDetails AS A WITH (nolock)
WHERE  A.ContactFirstName LIKE '%a%' or A.ContactLastName LIKE '%a%'
UNION
SELECT C.ContactFirstName, C.ContactLastName
FROM   Customer.Contacts AS C WITH (nolock) 
WHERE  C.ContactFirstName LIKE 'a%'

答案 1 :(得分:0)

使用Charindex提高搜索性能,在此检查字符串以匹配给定搜索字符的第一个字符,并且不会搜索更多匹配项。

DECLARE @Search VARCHAR(10)='a'
SELECT A.ContactFirstName, A.ContactLastName
    FROM   Customer.CustomerDetails AS A WITH (NOLOCK)
    WHERE  CHARINDEX(@Search,(A.ContactFirstName + ' ' + A.ContactLastName),0)>1