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