SQL Server 全文檢索(Full-Text Search)能對大量文字資料進行高效的語意搜尋,遠優於 `LIKE '%關鍵字%'` 的掃描效能。本文以系統預存程序方式,示範從啟用功能到建立目錄、索引、填充及查詢的完整流程。
建立全文檢索的六個步驟
- 啟用資料庫全文功能
`EXEC sp_fulltext_database 'enable';`
- 建立全文目錄
`EXEC sp_fulltext_catalog 'Ask91Fable', 'create', 'D:\Data\2005\Ask_91_Index';`
- 註冊需全文索引的資料表(需有唯一索引/主鍵)
`EXEC sp_fulltext_table 'Asks', 'create', 'Ask91Fable', 'PK_Ask';`
- 加入要索引的欄位
`EXEC sp_fulltext_column 'Asks', 'Subject', 'add';`
`EXEC sp_fulltext_column 'Asks', 'Detail', 'add';`
- 啟用資料表的全文檢索
`EXEC sp_fulltext_table 'Asks', 'activate';`
- 填充全文目錄
`EXEC sp_fulltext_table 'Asks', 'start_full';`
`-- EXEC sp_fulltext_table 'Asks', 'start_incremental';`
查詢效能對比:LIKE vs CONTAINS
測試資料 100 萬筆,查詢包含「NET小結」的記錄:
| 查詢方式 | 語法 | 耗時 |
| LIKE 雙欄位 | `WHERE Subject LIKE '%NET小結%' OR Detail LIKE '%NET小結%'` | 2 分 33 秒 |
| CONTAINS 全表 | `WHERE CONTAINS (Asks.*, 'NET小結')` | 0 分 40 秒 |
| LIKE 單欄位 | `WHERE Subject LIKE '%NET小結%'` | 0 分 42 秒 |
| CONTAINS 單欄位 | `WHERE CONTAINS (Asks.Subject, 'NET小結')` | 0 分 26 秒 |
結論:`CONTAINS` 結合全文索引,速度較 `LIKE` 快數十倍,且支援語意查詢(前綴、鄰近、權重等)。
常用維護指令
- 重建目錄:`EXEC sp_fulltext_catalog 'Ask91Fable', 'rebuild';`
- 停止填充:`EXEC sp_fulltext_catalog 'Ask91Fable', 'stop';`
- 刪除目錄:`EXEC sp_fulltext_catalog 'Ask91Fable', 'drop';`
相關系統預存程序速查
| 程序 | 權限 | 用途 |
| sp_fulltext_service | serveradmin/sysadmin | 設定全文搜尋屬性 |
| sp_fulltext_catalog | db_owner | 建立/刪除目錄、啟動/停止填充 |
| sp_fulltext_database | db_owner | 啟用/停用資料庫全文功能 |
| sp_fulltext_table | db_ddladmin/db_owner | 註冊/移除全文索引資料表、啟用/停用 |
| sp_fulltext_column | db_ddladmin | 加入/移除索引欄位 |