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