我有一個查詢與約6-7連接表並在其中基表的6列的FREETEXT()謂詞。現在SQL Server 2005中FREETEXT()性能比較問題
,這個查詢過去一年工作的罰款(下2秒)和幾乎保持不變(我試圖舊版本和問題依然存在)
所以今天,突然,同樣的查詢時間大約1-1.5分鐘。
在SQL Server 2005中檢查執行計劃,重建該表的FULLTEXT索引,重新組織FULLTEXT索引,從頭創建索引,重新啓動SQL Server服務,重新啓動整個服務器之後,我不知道還有什麼嘗試。
我暫時切換查詢中使用LIKE
代替直到我算出這個(這需要大約6秒現在)。
當我查看查詢性能分析器中的查詢時,當我將'FREETEXT'查詢與'LIKE'查詢進行比較時,前者具有350倍的讀取次數(4921261比13943)和20次(38937與1938年相比)後者的CPU使用率。
所以這真的是導致它這麼慢的'FREETEXT'predicate。
有沒有人有什麼原因可能是什麼想法?或者我可以做更多的測試?
[編輯]
好吧,我剛剛運行的查詢再次得到執行計劃,現在再次需要2-5秒,沒有給它所做的任何更改,但這個問題昨天依然存在。這不是由於任何外部因素造成的,因爲我在上個星期四第一次測試該問題時停止了所有訪問數據庫的應用程序,所以這不是由於任何其他負載所致。
好吧,我還是會包括執行計劃,儘管它可能不會有很大的幫助,現在一切都工作了...請注意,這是一個巨大的查詢,我不能改變舊的數據庫(即數據標準化或擺脫一些不必要的中間表)
確定這裏是完整的query
我可能要解釋正是它。基本上它獲得了招聘廣告的搜索結果,其中有兩種類型的廣告,優質廣告和普通廣告。結果分頁到每頁25個結果,10個頂級頂級和15個普通的結果,如果有足夠的話。
因此,有兩個內部查詢根據需要選擇許多高級/普通查詢(例如,在第10頁上,它會提取前100名高級數據和前150個普通數據),那麼這兩個查詢將與row_number()命令和一些數學。然後按rownumber排序組合並返回查詢。以及它在另一個地方用來獲取當前頁面所需的25個廣告。
哦,這個整個查詢是在一個巨大的遺留Coldfusion文件中構建的,因爲它一直在正常工作,所以我還沒敢達到/改變大部分......從來沒有碰過正在運行的系統等等)小東西像改變中央where子句的位。
該文件還生成其他基本相同的查詢,但沒有保費/非保費區分以及此查詢的很多其他變體,所以我從不確定對其中一個變更可能會發生何種變化其他...
好的,因爲問題沒有再出現,我給了馬丁賞金,因爲他迄今爲止最有幫助,我不希望賞金過期不必要的。由於每個人的努力,我會嘗試你的建議,如果它再次發生:)
你可以發佈執行計劃嗎?問題可能與Martin建議的一致,在這種情況下,使用FORCE ORDER重新排序查詢可能會有所幫助。 – 2010-05-31 16:35:04
奇怪。我假定您使用的是之前存在問題的相同FreeText搜索詞,並且數據中沒有任何變化(例如歸檔過程),可能突然導致來自FREETEXT部分的匹配記錄數量在一夜之間減少? – 2010-06-01 09:28:05
此外,如果確實設法讓問題重現,您可以使用Management Studio中的「包括實際執行計劃」選項並將其另存爲* .sqlplan(XML格式)? – 2010-06-01 09:49:09