| 特性 | 一般索引 | 全文索引 |
| 建立方式 | CREATE INDEX / 約束 | sp_fulltext_* 系統預存程序 |
| 更新機制 | 自動 (DML 同步) | 排程填充 / 手動 / 變更追蹤 |
| 每表數量 | 多個 | **僅一個** |
| 儲存位置 | 資料庫檔案 | 檔案系統 (全文目錄) |
| 分組管理 | 無 | 全文目錄 |
建立全文索引六步驟 (SQL 2000/2005 相容腳本)
-- 1. 啟用資料庫全文功能
USE pubs;
EXEC sp_fulltext_database 'enable';
-- 2. 建立全文目錄
EXEC sp_fulltext_catalog 'FT_pubs', 'create';
-- 3. 註冊資料表 (需唯一索引鍵,通常為 PK)
EXEC sp_fulltext_table 'titles', 'create', 'FT_pubs', 'UPKCL_titleidind';
-- 4. 指定全文檢索欄位
EXEC sp_fulltext_column 'titles', 'title', 'add';
EXEC sp_fulltext_column 'titles', 'notes', 'add';
-- 5. 啟用資料表全文索引
EXEC sp_fulltext_table 'titles', 'activate';
-- 6. 填充全文目錄 (完整填充)
EXEC sp_fulltext_catalog 'FT_pubs', 'start_full';
-- 等待填充完成
WHILE FULLTEXTCATALOGPROPERTY('FT_pubs', 'PopulateStatus') <> 0
WAITFOR DELAY '00:00:30';
全文查詢語法
-- CONTAINS: 精確詞彙/前綴/鄰近/加權
SELECT title FROM titles
WHERE CONTAINS(title, 'database')
OR CONTAINS(notes, 'database')
OR CONTAINS(title, 'computer')
OR CONTAINS(notes, 'computer');
-- FREETEXT: 自然語言、語意擴展
SELECT title FROM titles
WHERE FREETEXT(*, 'database management system');
進階填充策略 (SQL 2005+)
- 完整填充:重建整個目錄,耗時久,適合初始建立
- 增量填充:僅處理變更列,需
TIMESTAMP 欄位,搭配 SQL Agent 排程
- 變更追蹤 (自動/手動):即時/批次更新,現代首選
常見問題排查
- 全文服務 (Microsoft Search / FDLauncher) 未啟動
- 資料表無唯一單欄索引 (PK 或 UNIQUE NOT NULL)
- 斷詞器未安裝對應語言 (中文需安裝簡體/繁體斷詞器)
- 查詢語法錯誤:
CONTAINS 需雙引號包裹詞彙,支援 AND/OR/NEAR、"* 前綴、*" 片語
現代版本 (SQL 2008+) 建議改用 CREATE FULLTEXT CATALOG/INDEX DDL 語法,配合 ALTER FULLTEXT INDEX ... SET CHANGE_TRACKING AUTO,管理更直觀、效能更佳。舊版系統仍可沿用 sp_fulltext_* 維護。
- 上一篇文章: SQL Server 服務因登入失敗無法啟動 (錯誤 1069) 三種解決方案
- 下一篇文章: SQL Server 單引號處理兩大方案:字串轉義 vs 參數化查詢 (ADO Command 實戰)
Copyright ©
程式碼之家 All Rights Reserved