2012-09-25 72 views
1

我有两个全文搜索查询提高全文的查询性能

查询1:

Declare @KEYSEARCH nvarchar(4000)="string search here....". 
SELECT * FROM TABLE1 WHERE CONTAINS(col1,@KEYSEARCH) 

一次执行这个查询:0.2秒

查询2:

Declare @KEYSEARCH nvarchar(4000)="string search here....". 
SELECT * FROM TABLE1 WHERE (CONTAINS(col1,@KEYSEARCH) or @KEYSEARCH='%%') 

时间执行此查询:11s

第二个查询为什么这么慢?

+1

@KEYSEARCH ='%%'是什么意思? – Prasanna

+0

你能做一个解释吗?我的意思是:把这个关键字放在你的查询之前。您将可以为查询优化提供有价值的数据。 – Cedric

+0

@prasanna我怀疑目的是允许一个匹配所有内容的特殊“通配符”并返回所有行。 –

回答

1

在这种情况下,我怀疑引擎不够聪明,不知道你在做什么可能会在查询过程中修改@keysearch变量(例如:做某些技巧来完成聚合字符串连接) ,因此必须重新运行表格中每一行的='%%'检查。它也可能使全文索引无效。