首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >涉及CONTAINS and OR的慢SQL查询

涉及CONTAINS and OR的慢SQL查询
EN

Stack Overflow用户
提问于 2011-06-30 19:54:18
回答 2查看 5.4K关注 0票数 11

我们遇到了一个问题,我们希望Stack Overflow的好心人能帮我们解决。我们正在运行SQL Server2008 R2,并且遇到了一个查询问题,该查询需要很长时间才能在大约100000行的中等数据集上运行。我们使用CONTAINS来搜索xml文件,并在另一列上搜索LIKE,以支持前导通配符。

我们用下面的小查询重现了这个问题,这个小查询大约需要35秒才能运行:

代码语言:javascript
复制
SELECT something FROM table1 
WHERE (CONTAINS(TextColumn, '"WhatEver"') OR  
        DescriptionColumn LIKE '%WhatEver%')

查询计划:

如果我们将上面的查询修改为使用UNION,运行时间将从35秒下降到<1秒。我们希望避免使用这种方法来解决问题。

代码语言:javascript
复制
SELECT something FROM table1 WHERE (CONTAINS(TextColumn, '"WhatEver"') 
UNION
(SELECT something FROM table1 WHERE (DescriptionColumn LIKE '%WhatEver%'))

查询计划:

我们使用CONTAINS来搜索的列是一个类型为image的列,它由大小在1k到20k之间的xml文件组成。

我们没有很好的理论来解释为什么第一个查询这么慢,所以我们希望这里的一些人能对这个问题有一些明智的看法。据我们所知,查询计划并没有显示任何异常情况。我们还重建了索引和统计信息。

有什么明显的地方是我们忽视的吗?

提前感谢您的宝贵时间!

EN

回答 2

Stack Overflow用户

发布于 2012-03-30 20:35:31

你们有没有试过:

代码语言:javascript
复制
SELECT *
FROM table
WHERE CONTAINS((column1, column2, column3), '"*keyword*"')  

而不是这样:

代码语言:javascript
复制
SELECT *
FROM table
WHERE CONTAINS(column1, '"*keyword*"') 
OR CONTAINS(column2, '"*keyword*"') 
OR CONTAINS(column3y, '"*keyword*"') 

第一个要快得多。

票数 1
EN

Stack Overflow用户

发布于 2013-06-14 23:20:45

我就是碰到了这个。据报道,这是SQL server 2008 R2上的一个错误:

http://www.arcomit.co.uk/support/kb.aspx?kbid=000060

他们在那篇文章中推荐使用包含两个selects的UNION而不是OR的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6534322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档