Sql-Server-2008-R2

使用多個全文搜尋時全文緩慢

  • May 13, 2020

預先感謝您的幫助。我一直在發瘋。

我們最近通過在以下查詢中添加額外的包含來更改我們的程式碼。這對性能產生了真正的負面影響。當我們刪除包含或其他內容時,查詢會立即返回。

select * 
from dbo.company p with (nolock) 
 join dbo.alt_company o  with (nolock) on p.org_id = o.org_id 
where CONTAINS (p.description, '"phrase1*" OR "phrase2"')  
 or  CONTAINS (o.description, '"phrase1*" OR "phrase2"')  

為什麼第二個包含會對性能造成如此嚴重的破壞。關鍵字的數量使問題變得更糟。我已經以只有一個包含的方式重新編寫了查詢,並且效果很好。我只是想確保我了解正在發生的事情。

謝謝,皮特

OR降低性能的一種常見解決方法是將各個部分分開,然後UNION ALL將它們重新組合在一起:

select * 
from dbo.company p with (nolock) 
 join dbo.alt_company o  with (nolock) on p.org_id = o.org_id 
where CONTAINS (p.description, '"phrase1*" OR "phrase2"')  

UNION ALL -- note the "ALL", this will prevent a "DISTINCT"

select * 
from dbo.company p with (nolock) 
 join dbo.alt_company o  with (nolock) on p.org_id = o.org_id 
where CONTAINS (o.description, '"phrase1*" OR "phrase2"')  

您可以通過dbo.company在每個部分中僅引用一次來進一步優化;我將根據您的需求和業務規則將其留給您決定。

哦,停止使用select *and WITH (NOLOCK)

引用自:https://dba.stackexchange.com/questions/96262