對SQL Server而言,全文檢索提供了存儲在關系數據庫或者是文件系統上的文本的高級搜索能力。搜索并不局限于字符串,應用程序所能理解的例如詞干分析。這使得搜索“swim”,也返回“swims”, “swimming”,和“swam”。它也可以支持權重搜索,即某些詞比其他的詞更重要,并可以搜索兩個彼此相鄰的詞語。根據搜索條件的結果可以進行一個排名。
之前版本的全文檢索是一個外部服務,和SQL Server并排運行的服務。這樣設計,參與索引的表和列的數據不得不從SQL Server運送到全文檢索服務。全文檢索編目不能與其他的數據庫一起備份,而且兩個服務不能輕松的共享內存和CPU資源。
為了處理這些和其他的問題,SQL Server 2008把全文檢索移到數據庫中。現在SQL Server自身可以動態管理服務器資源,為服務自動管理改變內存和CPU資源配額。不幸的是,開發人員遇到了這種設計的一些意外結果。
他們依然會碰到的特定問題是事務。在一個事務性的數據庫中,SQL Server要時刻遵守ACID的規則。這意味著在搜索的時候行、頁或甚至整個表都被鎖定。通常情況下不會太壞,但是Brent Ozar解釋說,錯誤的搜索會讓事情變得復雜。
如果你在修正版(Revisions)上進行全文檢索并且包含一些常見的關鍵字,像SQL滯留,則需要匹配數以萬計的記錄。當我們查看一下查詢計劃的時候,我們看到有50-100k的讀操作。在表里面做這樣的事情,也會獲得沉重的表插入,事務性的災難。
Jeff Attwodd繼續說道。
上一篇 谷歌PR讓網站站長處于尷尬的境地