2013-09-23 81 views
2

SQL Server(2008 R2)全文搜索存在性能問題。當我們在全文搜索條件附加條件時,它會變得太慢。具有附加條件的SQL Server全文搜索性能

這裏是我的簡單查詢:

SELECT * FROM Calls C 
WHERE (C.CallTime BETWEEN '2013-08-01 00:00:00' AND '2013-08-07 00:00:00') 
AND CONTAINS(CustomerText, '("efendim")') 

呼叫表的主鍵是呼叫ID(INT,聚集索引),並調用由CallTime索引表。我們有160000000行,每行的CustomerText大約爲10KB。

當我看到執行計劃時,首先找到全文搜索結果集,然後通過CallId與Calls表連接。因此,如果第一個結果集具有更多行,則查詢會變慢(超過一分鐘)。

這是執行計劃:

This is the execution plan

當我運行在條件seperately,它返回CallTime條件360.000行:

SELECT COUNT(*) FROM Calls C 
WHERE (C.CallTime BETWEEN '2013-08-01 00:00:00' AND '2013-08-07 00:00:00') 

和1.200.000行爲包含條件:

SELECT COUNT(*) FROM Calls C 
WHERE CONTAINS(AgentText, '("efendim")') 

那麼,我該怎麼做提高我的查詢的性能?

+0

我首先不使用'BETWEEN',它的可怕性能和可讀性。我會改用'(C.CallTime> ='2013-08-01 00:00:00'和C.CallTime <'2013-08-07 00:00:00')' –

+0

如果你的' d將表格定義以及您創建的所有索引一起發佈。 –

回答

0

如果你根據自己的通話時間索引和排序Calls,而不是調用的:

WHERE (C.CallTime BETWEEN '2013-08-01 00:00:00' AND '2013-08-07 00:00:00') 

你可以用通話時間比'2013-08-01 00:00:00'更大,最後指數比'2013-08-07 00:00:00'

較小找到的第一個指數

和你的新的條件是:

WHERE (C.CallTime BETWEEN first_index AND last_index) 

這是不是比較快日期。