理解全文本搜索
并非所有引擎都支持全文本搜索 正如第21章所述,MySQL支持幾種基本的數據庫引擎。并非所有的引擎都支持本書所描述的全文本搜索。兩個最常使用的引擎為 MyISAM 和 InnoDB ,前者支持全文本搜索,而后者不支持。這就是為什么雖然本書中 創 建 的 多 數 樣 例 表 使 用 InnoDB , 而 有 一 個 樣 例 表( productnotes 表)卻使用 MyISAM 的原因。如果你的應用中需要全文本搜索功能,應該記住這一點。
LIKE 關鍵字,它利用通配操作符匹配文本(和部分文本)。使用 LIKE ,能夠查找包含特殊值或部分值的行(不管這些值位于列內什么位置)。
用基于文本的搜索作為正則表達式匹配列值的更進一步的介紹。使用正則表達式,可以編寫查找所需行的非常復雜的匹配模式。
雖然這些搜索機制非常有用,但存在幾個重要的限制。
1.性能——通配符和正則表達式匹配通常要求MySQL嘗試匹配表中所有行(而且這些搜索極少使用表索引)。因此,由于被搜索行數不斷增加,這些搜索可能非常耗時。
2.明確控制——使用通配符和正則表達式匹配,很難(而且并不總是能)明確地控制匹配什么和不匹配什么。例如,指定一個詞必須匹配,一個詞必須不匹配,而一個詞僅在第一個詞確實匹配的情況下才可以匹配或者才可以不匹配。
3.智能化的結果——雖然基于通配符和正則表達式的搜索提供了非常靈活的搜索,但它們都不能提供一種智能化的選擇結果的方法。例如,一個特殊詞的搜索將會返回包含該詞的所有行,而不區分包含單個匹配的行和包含多個匹配的行(按照可能是更好的匹配來排列它們)。類似,一個特殊詞的搜索將不會找出不包含該詞但包含其他相關詞的行。
所有這些限制以及更多的限制都可以用全文本搜索來解決。在使用全文本搜索時,MySQL不需要分別查看每個行,不需要分別分析和處理每個詞。MySQL創建指定列中各詞的一個索引,搜索可以針對這些詞進行。這樣,MySQL可以快速有效地決定哪些詞匹配(哪些行包含它們),哪些詞不匹配,它們匹配的頻率,等等。