使用like运算符检索Varchar记录时,搜索结果非常慢

时间:2010-10-06 08:06:01

标签: sql-server-2005

电子邮件匹配字段='@ hotmail.com'

输入的电子邮件匹配字段:结果1199 - 返回速度40秒

未输入电子邮件匹配字段:结果429 - 返回速度1.6秒

SELECT * FROM emails e where e.[From] like '%@hotmail.com%' OR e.[To] like '%@hotmail.com%'order by [id] DESC

我必须在开始和结束时使用%,因为我想在电子邮件地址中搜索

编辑:

alt text

alt text

alt text

原始查询的执行计划

1 个答案:

答案 0 :(得分:1)

在优化效果时,索引和统计信息始终是您首先要考虑的内容,但对于针对该确切查询的更一般方法:

OR子句实际上将查询分为两个查询,一个检查每个条件,执行两个查询,然后合并结果并过滤掉重复项。

您可能会通过

等查询获得性能
SELECT * FROM emails e
WHERE (e.From + '/' + e.To) LIKE '%@hotmail.com%'
ORDER BY id DESC

...虽然有点丑陋=)在你的查询分析器中尝试一下,看看效果最好......

修改

正如Martin在评论中指出的那样,如果字段可以为空,则必须更新WHERE子句以适应:

WHERE ( ISNULL(e.From,'') + '/' + ISNULL(e.To,'') ) LIKE '%@hotmail.com%'