在SQL Server數據庫中可以使用全文索引,與僅適用於字符模式的 LIKE 謂詞不同,全文查詢將根據特定語言的規則對詞和短語進行操作,從而針對此數據執行語言搜索。
對大量非結構化的文本數據進行查詢時,使用全文搜索獲得的性能優勢會得到充分的表現。對數百萬行文本數據執行的 LIKE 查詢可能需要花費幾分鐘時間才能返回結果;但對同樣的數據,全文查詢只需要幾秒或更少的時間,具體取決於返回的行數。
可以對包含 char、varchar 和 nvarchar 數據的列創建全文索引。也可以對包含格式化二進制數據(如存儲在 varbinary(max) 或 image 列中的 Microsoft Word 文檔)的列創建全文索引。不能使用 LIKE 謂詞來查詢格式化的二進制數據。若要對一個表創建全文索引,該表必須具有一個唯一且非空的列。
下面是創建全文檢索的步驟
1、首先創建一個全文目錄,一個全文目錄可以包含多個全文索引,但一個全文索引只能用於構成一個全文目錄。每個數據庫可以不包含全文目錄或包含多個全文目錄。as default參數表明把此全文目錄作為默認的全文目錄。
Create fulltext catalog DocumentCatalog as default
2、然後創建唯一非聚集索引。
create unique index T_DocumentsContent_VerID on T_DocumentsContent(VerID)
這個一般把你要全文索引的表上的主鍵作為唯一非聚集索引。該索引將強制插入列中的數據具有唯一性。一般都是主鍵符合這個要求。
3、最後一步就是創建全文索引
Create FULLTEXT INDEX ON T_DocumentsContent(DOCUCONTENT TYPE COLUMN ExtendedName)
key index T_DocumentsContent_VerID on DocumentCatalog
with change_tracking auto
- T_DocumentsContent:用於全文索引的表明
- DocuContent:用於全文檢索的字段
- 如果用於全文檢索的字段是二進制流文件,那麼要通過指定這個二進制流文件的擴展名由哪個列提供數據。如上例的Type Column ExtendedName,表明DocuContent的類型由ExtendedName列提供
- key index用來指定全文索引表唯一鍵索引的名稱
- on DocumentCatalog:表明這個全文索引是建立在哪個全文目錄上
- with Change_Tracking:指定 SQL Server 是否維護一份對索引數據的全部更改的列表。更改跟蹤不會記錄通過 WRITETEXT 和 UPDATETEXT 進行的數據更改。他有幾個選項
- 1. MANUAL: 指定是使用 SQL Server 代理按計劃傳播更改跟蹤日志,還是由用戶手動進行傳播。
- 2.AUTO:指定在關聯的表中修改了數據時,SQL Server 自動更新全文索引。默認值為 AUTO。
- 3.OFF [ ,NO POPULATION] 指定 SQL Server 不保留對索引數據的更改的列表。僅當ANGE_TRACKING 為 OFF 時,才能使用 NO POPULATION 選項。如果指定了 NO POPULATION,則 SQL Server 在創建索引後不會對其進行填充。只有在用戶使用 START FULL 或 INCREMENTAL POPULATION 子句執行 ALTER FULLTEXT INDEX 命令後,才會填充索引。如果未指定 NO POPULATION,則 SQL Server 創建索引後將對其進行完全填充
當然如果需要使用全文索引需要把全文索引服務啟動,就是SQL Server FullText Search這個服務。注意Sql Express版本不能使用全文索引。