MySQL 之全文索引


 

概念

    通常數值比較、范圍過濾等就可以完成絕大多數我們需要的查詢,但是,如果希望通過關鍵字的匹配來進行查詢過濾,那么就需要基於相似度的查詢,而不是原來的精確數值比較。全文索引就是為這種場景設計的。

    當然,用 like + % 就可以實現模糊匹配了,為什么還要全文索引?like + % 在文本比較少時是合適的,但是對於大量的文本數據檢索,是不可想象的。全文索引在大量的數據面前,能比 like + % 快 N 倍,速度不是一個數量級,但是全文索引可能存在精度問題。

     常見的各種的搜索引擎,雖然搜索引擎的索引對象是超大量的數據,並且通常其背后都不是關系型數據庫,不過全文索引的基本原理是一樣的。

mysql 版本支持

   全文索引的版本、存儲引擎、數據類型的支持情況:

    1、MySQL 5.6 以前的版本,只有 MyISAM 存儲引擎支持全文索引。

    2、MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存儲引擎均支持全文索引。 

    3、只有字段的數據類型為 char、varchar、text 及其系列才可以建全文索引。

總之,

  MySQL 的全文索引最開始僅支持英語,因為英語的詞與詞之間有空格,使用空格作為分詞的分隔符是很方便的。亞洲文字,比如漢語、日語、漢語等,是沒有空格的,這就造成了一定的限制。不過 MySQL 5.7.6 開始,引入了一個 ngram 全文分析器來解決這個問題,並且對 MyISAM 和 InnoDB 引擎都有效。

  事實上,MyISAM 存儲引擎對全文索引的支持有很多的限制,例如表級別鎖對性能的影響、數據文件的崩潰、崩潰后的恢復等,這使得 MyISAM 的全文索引對於很多的應用場景並不適合。所以,多數情況下的建議是使用別的解決方案,例如 Sphinx、Lucene 等等第三方的插件,亦或是使用 InnoDB 存儲引擎的全文索引。

幾個注意點:
1、使用全文索引前,搞清楚版本支持情況;
2、全文索引比 like + % 快 N 倍,但是可能存在精度問題;
3、如果需要全文索引的是大量數據,建議先添加數據,再創建索引;
4、對於中文,可以使用 MySQL 5.7.6 之后的版本,或者第三方插件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM