2012-09-25 70 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變量(例如:做某些技巧來完成聚合字符串連接) ,因此必須重新運行表格中每一行的='%%'檢查。它也可能使全文索引無效。