【发布时间】:2015-02-05 06:48:45
【问题描述】:
我是t-sql和sql server的新手,有一个关于短路和全文搜索的问题。 假设我有这样的声明:
SELECT *
FROM t1
LEFT JOIN t2
ON t1.Id = t2.Id
WHERE contains(t1.Field1,@word) or contains(t2.Field2,@word)
我的想法是检查 t1.Field1 是否包含@word,如果为真 - 无需检查第二个条件,如果为假 - 检查第二个包含。但我已经明白,这不起作用,并且此查询执行包含并花费时间进行不必要的工作。所以我想问我怎样才能避免执行这些不必要的谓词。
【问题讨论】:
-
你有什么证据表明它正在做额外的工作?我会将其更改为“and (contains(t1.Field1,@word) 或 contains(t2.Field2,@word))”
标签: sql-server tsql full-text-search