我们遇到了一个问题,我们希望Stack Overflow的好人可以帮助我们。我们正在运行SQL Server 2008 R2,并且在查询中遇到问题,需要很长时间才能在适中的数据集(大约100000行)上运行。我们使用CONTAINS搜索XML文件,并在另一列上搜索以支持领先的通配符。涉及CONTAINS和OR的慢SQL查询
SELECT something FROM table1
WHERE (CONTAINS(TextColumn, '"WhatEver"') OR
DescriptionColumn LIKE '%WhatEver%')
查询计划:
我们已经与大约需要35秒运行下面的小查询问题再次出现,
如果我们修改上面的查询使用UNION代替,运行时间从35秒降至< 1秒。我们希望避免使用这种方法来解决问题。
SELECT something FROM table1 WHERE (CONTAINS(TextColumn, '"WhatEver"')
UNION
(SELECT something FROM table1 WHERE (DescriptionColumn LIKE '%WhatEver%'))
查询计划:
我们使用的列包含通过搜索与类型图像的列,包括XML文件大小在任何地方从1K到大小为20K。
对于为什么第一个查询太慢,我们没有很好的理论,所以我们希望这里的某个人能够对此事有明智的说法。据我们所知,查询计划没有显示任何异常情况。我们还重建了索引和统计数据。
我们在这里忽略了什么明显的明显?
在此先感谢您的时间!
您是否尝试过更改where子句的顺序? – idstam
是的,我们已经试过了。表现没有可衡量的差异。 – Tilfeldig
你可以单独运行这两个查询吗?哪个更慢? – niktrs