MySQL 全文索引的原理與缺陷
MySQL全文索引一種特殊的索引,它會(huì)把某個(gè)數(shù)據(jù)表的某個(gè)數(shù)據(jù)列出現(xiàn)過的所有單詞生成一份清單。
alter table tablename add fulltext(column1,column2)
說明:
只能在MyISAM數(shù)據(jù)表中創(chuàng)建
全文索引是以空格或標(biāo)點(diǎn)隔開才能搜到的,搜中文是搜不到(有專門的應(yīng)用支持中文分詞可以搜中文,但都不理想)
少于3個(gè)字符的單詞不會(huì)被包含在全文索引里,可以通過修改my.cnf修改選項(xiàng)
ft_min_word_len=3
重新啟動(dòng)MySQL服務(wù)器,用repair table tablename quick
為有關(guān)數(shù)據(jù)表重新生成全文索引
select * from tablename where match(column1,column2) against('word1 word2 word3')>0.001
match ... against 把column1,column2數(shù)據(jù)列中至少包含word1,word2,word3三個(gè)單詞之一的數(shù)據(jù)記錄查找到,在關(guān)鍵字match后的數(shù)據(jù)列必須 跟創(chuàng)建全文索引的數(shù)據(jù)列相同,檢索詞不區(qū)分大小寫和先后順序,少于3個(gè)字符的單詞通常被忽略。match... against ...表達(dá)式返回一個(gè)浮點(diǎn)數(shù)作為它本身的求值結(jié)果,這個(gè)數(shù)字反映了結(jié)果記錄與被檢索單詞的匹配程度。如果沒有匹配到任何記錄,或者匹配到的結(jié)果記錄太多反 而被忽略,表達(dá)式將返回0,表達(dá)式>0.001的作用是排除match的返回值太小的結(jié)果記錄。
select *,match(column1,column2) against ('word1 word2 word3') as mtch from tablename having mtch>0.01 order by mtch desc limit 5
找出最匹配的5條記錄,在where字句中不能使用假名,所以用having
布爾全文搜索的性能支持以下操作符:
+word:一個(gè)前導(dǎo)的加號(hào)表示該單詞必須 出現(xiàn)在返回的每一行的開頭位置。
-word: 一個(gè)前導(dǎo)的減號(hào)表示該單詞一定不能出現(xiàn)在任何返回的行中。
(無操作符):在默認(rèn)狀態(tài)下(當(dāng)沒有指定 + 或–的情況下),該單詞可有可無,但含有該單詞的行等級(jí)較高。這和MATCH() ... AGAINST()不使用IN BOOLEAN MODE修改程序時(shí)的運(yùn)作很類似。
> <這兩個(gè)操作符用來改變一個(gè)單詞對(duì)賦予某一行的相關(guān)值的影響。 > 操作符增強(qiáng)其影響,而 <操作符則減弱其影響。請(qǐng)參見下面的例子。
( )括號(hào)用來將單詞分成子表達(dá)式。括入括號(hào)的部分可以被嵌套。
~word:一個(gè)前導(dǎo)的代字號(hào)用作否定符, 用來否定單詞對(duì)該行相關(guān)性的影響。 這對(duì)于標(biāo)記“noise(無用信息)”的單詞很有用。包含這類單詞的行較其它行等級(jí)低。
word* :搜索以word開頭的單詞,只允許出現(xiàn)在單詞的末尾
"word1 word" :給定單詞必須出現(xiàn)在數(shù)據(jù)記錄中,先后順序也必須匹配,區(qū)分字母大小寫
select * from tablename where match(column1,column2) against ('+word1 +word2 -word3' in boolean mode')
布爾檢索只能返回1或者0,不再返回表示匹配程度的浮點(diǎn)數(shù)
全文索引的缺陷:
1.數(shù)據(jù)表越大,全文索引效果好,比較小的數(shù)據(jù)表會(huì)返回一些難以理解的結(jié)果。
2.全文檢索以整個(gè)單詞作為匹配對(duì)象,單詞變形(加上后綴,復(fù)數(shù)形式),就被認(rèn)為另一個(gè)單詞。
3.只有由字母,數(shù)字,單引號(hào),下劃線構(gòu)成的字符串被認(rèn)為是單詞,帶注音符號(hào)的字母仍是字母,像C++不再認(rèn)為是單詞
4.不區(qū)分大小寫
5.只能在MyISAM上使用
6.全文索引創(chuàng)建速度慢,而且對(duì)有全文索引的各種數(shù)據(jù)修改操作也慢
7.不支持中文
以上就是MySQL 全文索引的原理與缺陷的詳細(xì)內(nèi)容,更多關(guān)于MySQL 全文索引的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySQL InnoDB 鎖的相關(guān)總結(jié)
這篇文章主要介紹了MySQL InnoDB 鎖的相關(guān)知識(shí)總結(jié),幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下2021-02-02MySQL中的數(shù)據(jù)加密解密安全技術(shù)教程
在數(shù)據(jù)庫應(yīng)用程序中,數(shù)據(jù)的安全性是至關(guān)重要的,MySQL作為一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),也提供了一些數(shù)據(jù)加密和解密的技巧來保護(hù)敏感數(shù)據(jù)的安全性,為了保護(hù)敏感數(shù)據(jù)免受未經(jīng)授權(quán)的訪問,我們可以使用加密和解密技術(shù)2024-01-01MySQL遞歸sql語句WITH表達(dá)式實(shí)現(xiàn)方法代碼
SQL遞歸查詢語句是指通過遞歸方式對(duì)數(shù)據(jù)進(jìn)行查詢的語句,下面這篇文章主要給大家介紹了關(guān)于MySQL遞歸sql語句WITH表達(dá)式實(shí)現(xiàn)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01MySQL報(bào)錯(cuò)1040'Too?many?connections'的原因以及解決方案
這篇文章主要給大家介紹了關(guān)于MySQL報(bào)錯(cuò)1040'Too?many?connections'的原因以及解決方案,文中通過實(shí)例代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07AlmaLinux 9 安裝 MySQL 8.0.32的詳細(xì)過程
這篇文章主要介紹了AlmaLinux 9 安裝 MySQL 8.0.32的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04MySQL的查詢緩存機(jī)制基本學(xué)習(xí)教程
這篇文章主要介紹了MySQL的查詢緩存機(jī)制基本學(xué)習(xí)教程,默認(rèn)針對(duì)InnoDB存儲(chǔ)引擎下來將,需要的朋友可以參考下2015-11-11mysql 循環(huán)批量插入的實(shí)例代碼詳解
本文通過實(shí)例代碼文字相結(jié)合的形式給大家介紹了mysql 循環(huán)批量插入功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05mysql中獲取一天、一周、一月時(shí)間數(shù)據(jù)的各種sql語句寫法
今天抽時(shí)間整理了一篇mysql中與天、周、月有關(guān)的時(shí)間數(shù)據(jù)的sql語句的各種寫法,部分是收集資料,全部手工整理,自己學(xué)習(xí)的同時(shí),分享給大家,并首先默認(rèn)創(chuàng)建一個(gè)表、插入2條數(shù)據(jù),便于部分?jǐn)?shù)據(jù)的測(cè)試,其中部分名詞或函數(shù)進(jìn)行了解釋說明。直入主題2014-05-05