mysql全文索引FULLTEXT的哈希与BTREE方法对比
為什么【FULLTEXT】用【BTREE】?答案如下:
FULLTEXT:
全文搜索的索引。FULLTEXT 用于搜索很長一篇文章的時候,效果最好。用在比較短的文本,如果就一兩行字的,普通的 INDEX 也可以。
?
全文索引:
FULLTEXT(全文)索引,僅可用于MyISAM和InnoDB,針對較大的數據,生成全文索引非常的消耗時間和空間。對于文本的大對象,或者較大的CHAR類型的數據,如果使用普通索引,那么匹配文本前幾個字符還是可行的,但是想要匹配文本中間的幾個單詞,那么就要使用LIKE %word%來匹配,這樣需要很長的時間來處理,響應時間會大大增加,這種情況,就可使用時FULLTEXT索引了,在生成FULLTEXT索引時,會為文本生成一份單詞的清單,在索引時及根據這個單詞的清單來索引。FULLTEXT可以在創建表的時候創建,也可以在需要的時候用ALTER或者CREATE INDEX來添加:
//創建表的時候添加FULLTEXT索引 CTREATE TABLE my_table(id INT(10) PRIMARY KEY,name VARCHAR(10) NOT NULL,my_text TEXT,FULLTEXT(my_text) )ENGINE=MyISAM DEFAULT CHARSET=utf8; //創建表以后,在需要的時候添加FULLTEXT索引 ALTER TABLE my_table ADD FULLTEXT INDEX ft_index(column_name);全文索引的查詢也有自己特殊的語法,而不能使用LIKE %查詢字符串%的模糊查詢語法
SELECT * FROM table_name MATCH(ft_index) AGAINST('查詢字符串');對于較大的數據集,把數據添加到一個沒有FULLTEXT索引的表,然后添加FULLTEXT索引的速度比把數據添加到一個已經有FULLTEXT索引的表快
哈希索引:
只有memory(內存)存儲引擎支持哈希索引,哈希索引用索引列的值計算該值的hashCode,然后在hashCode相應的位置存執該值所在行數據的物理位置,因為使用散列算法,因此訪問速度非常快,但是一個值只能對應一個hashCode,而且是散列的分布方式,因此哈希索引不支持【范圍查找】和【排序】的功能。
BTree索引:
BTree是平衡搜索多叉樹,設樹的度為2d(d>1),高度為h,那么BTree要滿足以一下條件:
每個葉子結點的高度一樣,等于h;
每個非葉子結點由n-1個key和n個指針point組成,其中d<=n<=2d,key和point相互間隔,結點兩端一定是key;
葉子結點指針都為null;
非葉子結點的key都是[key,data]二元組,其中key表示作為索引的鍵,data為鍵值所在行的數據;
在BTree的機構下,就可以使用二分查找的查找方式,查找復雜度為h*log(n),一般來說樹的高度是很小的,一般為3左右,因此BTree是一個非常高效的查找結構。
希望能對大家有所幫助。
總結
以上是生活随笔為你收集整理的mysql全文索引FULLTEXT的哈希与BTREE方法对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 密码强度测试工具包【Java】_测试用例
- 下一篇: 【实施工程师之家】——mysql四种索引