全文索引 vs 一般索引比較
| 特性 | 一般索引 | 全文索引 |
| 建立方式 | CREATE INDEX / 約束 | 系統預存程序 |
| 更新機制 | 資料異動自動維護 | 排程填充或手動啟動 |
| 每張表數量 | 多個 | 僅一個 |
| 儲存位置 | 資料庫檔案(MDF/NDF) | 檔案系統(全文目錄) |
| 群組管理 | 無 | 多個全文索引可組成全文目錄 |
建立全文索引六大步驟(對應系統預存程序)
- 啟用資料庫全文功能:
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
IF (SELECT DATABASEPROPERTY('pubs','IsFulltextEnabled')) = 0
EXEC sp_fulltext_database 'enable'
EXEC sp_fulltext_catalog 'FT_pubs', 'create'
EXEC sp_fulltext_table 'titles', 'create', 'FT_pubs', 'UPKCL_titleidind'
EXEC sp_fulltext_table 'titles', 'activate'
EXEC sp_fulltext_column 'titles', 'title', 'add'
EXEC sp_fulltext_column 'titles', 'notes', 'add'
EXEC sp_fulltext_catalog 'FT_pubs', 'start_full'
GO
-- 監控填充進度
WHILE FULLTEXTCATALOGPROPERTY('FT_pubs', 'PopulateStatus') <> 0
BEGIN
WAITFOR DELAY '00:00:05'
END
查詢語法:CONTAINS / FREETEXT
-- 精確詞彙搜尋
SELECT * FROM titles WHERE CONTAINS(title, 'SQL')
-- 自然語言搜尋
SELECT * FROM titles WHERE FREETEXT(notes, 'database performance tuning')
維護提醒
- 定期排程
start_incremental 或 start_full 更新索引
- 監控全文目錄大小,避免磁碟爆滿
- SQL 2000 起支援變更追蹤自動更新,減少手動維護