全文索引 vs 一般索引:核心差異
| 特性 | 一般索引 | 全文索引 |
| 建立方式 | CREATE INDEX / 約束 | 系統預存程序 |
| 更新機制 | DML 自動同步 | 排程填充 / 變更追蹤 |
| 每表數量 | 多個 | 僅一個 |
| 儲存位置 | 資料庫檔案 | 檔案系統 (全文目錄) |
| 查詢語法 | WHERE col = 'val' | CONTAINS / FREETEXT |
六步建立流程(系統預存程序)
sp_fulltext_database 'enable' — 啟用資料庫全文功能
sp_fulltext_catalog 'FT_Catalog', 'create' — 建立全文目錄
sp_fulltext_table 'TableName', 'create', 'FT_Catalog', 'UniqueIndexName' — 註冊表(需唯一索引/主鍵)
sp_fulltext_column 'TableName', 'ColumnName', 'add' — 加入全文索引欄位
sp_fulltext_table 'TableName', 'activate' — 啟用表全文索引
sp_fulltext_catalog 'FT_Catalog', 'start_full' — 完整填充目錄
完整範例:Pubs 資料庫 Titles 表
USE pubs;
GO
-- 1. 啟用資料庫全文功能
IF DATABASEPROPERTY('pubs', 'IsFulltextEnabled') = 0
EXEC sp_fulltext_database 'enable';
GO
-- 2. 建立全文目錄
EXEC sp_fulltext_catalog 'FT_Pubs', 'create';
GO
-- 3. 註冊表(UPKCL_titleidind 為 title_id PK 索引)
EXEC sp_fulltext_table 'titles', 'create', 'FT_Pubs', 'UPKCL_titleidind';
GO
-- 4. 指定索引欄位
EXEC sp_fulltext_column 'titles', 'title', 'add';
EXEC sp_fulltext_column 'titles', 'notes', 'add';
GO
-- 5. 啟用表全文索引
EXEC sp_fulltext_table 'titles', 'activate';
GO
-- 6. 完整填充
EXEC sp_fulltext_catalog 'FT_Pubs', 'start_full';
GO
-- 等待填充完成
WHILE FULLTEXTCATALOGPROPERTY('FT_Pubs', 'PopulateStatus') <> 0
WAITFOR DELAY '00:00:30';
GO
-- 7. 全文查詢
SELECT title
FROM titles
WHERE CONTAINS(title, 'database') OR CONTAINS(title, 'computer')
OR CONTAINS(notes, 'database') OR CONTAINS(notes, 'computer');
填充策略與效能調校
- 完整填充:初始建立、結構變更後。耗時最長。
- 增量填充:
start_incremental,需啟用 變更追蹤 (sp_fulltext_table 'titles', 'start_change_tracking')。
- 手動更新:
start_update,批次處理變更。
- 排程:SQL Server Agent 作業定期執行增量/更新填充。
查詢語法精要
| 謂詞 | 用途 | 範例 |
| CONTAINS | 精確/前綴/鄰近/加權查詢 | CONTAINS(col, '"SQL Server*"') |
| FREETEXT | 自然語言/語意查詢 | FREETEXT(col, 'how to optimize index') |
| CONTAINSTABLE | 傳回排名資料表 (KEY, RANK) | JOIN 回主表依 RANK 排序 |
| FREETEXTTABLE | 同前,語意排名 | 同上 |
常見問題排查
- 全文搜尋服務未啟動:服務
MSSQLSERVER / MSFTESQL 需運行。
噪音詞 過濾:noise.dat 可自訂停用詞。
- 斷詞器:中文需安裝簡/繁體斷詞器,否則按單字元索引,精度極低。
- 權限:需
db_owner 或 sysadmin 執行建立/填充程序。
結語
SQL Server 7.0/2000 奠定了全文檢索基礎架構:目錄→表→欄位→填充→查詢。雖然後續版本引入 CREATE FULLTEXT INDEX DDL、語意搜尋、FileTable 整合,但核心概念不變。掌握六步建立流程、填充策略與 CONTAINS/FREETEXT 查詢語法,即可在舊版系統實現高效全文搜尋。
- 上一篇文章: 重建索引消除碎片,大幅提升 SQL Server 效能完整指南
- 下一篇文章: SQL Server 加密預存程序破解原理與防範對策
Copyright ©
程式碼之家 All Rights Reserved