LIKE '%keyword%' 無法使用索引,大表全文搜索極慢。MySQL 全文索引(FULLTEXT)針對文本列建立倒排索引,支援自然語言相關度排序。
ALTER TABLE articles ADD FULLTEXT INDEX ft_content (content);
驗證:SHOW INDEXES FROM articles; 顯示 Index_type: FULLTEXT。
-- 自然語言模式(默認),按相關度降序
SELECT id, title FROM articles
WHERE MATCH(content) AGAINST('MySQL 優化');
-- 布爾模式,支援 + - * 運算符
SELECT id, title FROM articles
WHERE MATCH(content) AGAINST('+MySQL -入門' IN BOOLEAN MODE);
-- 查詢擴展模式
SELECT id, title FROM articles
WHERE MATCH(content) AGAINST('數據庫' WITH QUERY EXPANSION);
| 項目 | 說明 |
|---|---|
| 最小詞長 | ft_min_word_len=4(默認),中文需設置為 1 或使用 ngram 解析器(5.7.6+) |
| 停用詞 | 內置停用詞表,可自定義 ft_stopword_file |
| 中文支援 | 5.7+ 內置 ngram 解析器:FULLTEXT INDEX ft_content (content) WITH PARSER ngram |
| 事務隔離 | 5.6+ InnoDB 支援事務一致性全文索引 |
