电子邮件匹配字段='@ 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
我必须在开始和结束时使用%,因为我想在电子邮件地址中搜索
编辑:
原始查询的执行计划
答案 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%'