mysql大文字搜尋

2021-09-11 07:17:31 字數 2090 閱讀 1342

mysql內建了三種儲存引擎,分別是innodb,myisammemory,一般情況下,mysql5.x之後的版本都是使用innodb儲存引擎.

三種引擎的對比

innodb

支援事務操作

支援自動增加列

具有行級鎖定

myisam

不支援事務,也不支援外來鍵,但是訪問速度快

對大文字搜尋效能較好

memory

目標資料較少,而且需要頻繁的被訪問

採取的儲存介質是系統記憶體,因此訪問速度快,但是現在可以使用第三方記憶體型資料庫代替

綜上所述,大文字的資料需要採用myisam儲存引擎作為儲存.

測試例子:

create

table

ifnot

exists product_desc

(

prod_id int

notnull

, prod_text text

, fulltext ( prod_text )

)engine

= myisam;

建立索引可以在建立表時,直接新增,也可以在資料全部匯入完畢之後再建立索引.一般而言,後面一種比前面一種的效率更好.

使用match()against()函式進行搜尋.

例如:

select prod_text 

from product_desc

where

match

(note_text) against(

'rabbit'

);

myisam執行大文字的搜尋還是很快的,是因為它內部對大文字建立了索引.

myisam內部究竟是怎麼工作的呢?

select prod_text,

match

(note_text) against(

'rabbit')as

'rank'

from product_desc;

可以從得出的結果中看到:

詞靠前的行比詞靠後的行的等級優先值更高

myisam內部會存在一些常見無意義的詞進行過濾,不做索引

搜尋出來的結果會根據唯一詞/索引中詞等的總數進行顯示

select prod_text 

from product_desc

where

match

(note_text) against(

'rabbit'

with query expansion)

;

全文本布林操作符

布林操作符說明+

包含,表示單詞必須存在

-排除,表示單詞必須不存在

>

包含,而且需要增加單詞的優先順序

<

包含,但是需要減少單詞的優先順序

~取消詞的排序值

*詞尾的萬用字元

「」定義乙個短語

案例:

select prod_text 

from product_desc

where

match

(note_text) against(

'+rabbit'

inboolean

mode

);

注意:

索引全文本時,三個及三個以下的字元的單詞是被索引忽略的

mysql內部維護了乙個非用詞(stopword)列表,這些詞在索引時將被忽略

許多詞出現的頻率很高,搜尋他們沒有用處,因此當乙個詞出現在50%以上的行中,將被忽略

表中的行數少於三行,全文本搜尋不返回結果

忽略單詞中的單引號

僅在myisam儲存引擎中支援全文本搜尋

MYSQL全文本搜尋

為了進行全文本搜尋,必須索引被搜尋的列,而且要隨著資料的改變不斷的重新索引。對表列進行適當的改進後,mysql會自動進行所有的索引和重新索引。優點 效能快明確控制 智慧型化的結果 fulltext 列名 mysql對該列索引自動更新 使用match 被搜尋的列 against 指定要使用的搜尋表示式...

mysql在全文本 MYSQL全文本搜尋

全文本搜尋 使用全文本搜尋 啟用全文本搜尋 進行全文本搜尋 使用拓展查詢 布林文字搜尋 使用全文本搜尋 為了進行全文本搜尋,必須索引被搜尋的列,而且要隨著資料的改變不斷的重新索引。對表列進行適當的改進後,mysql會自動進行所有的索引和重新索引。優點 效能快 明確控制 智慧型化的結果 啟用全文本搜尋...

mysql搜尋字 如何搜尋文字? MySQL的

我有這張桌子 bussid nameen keywords 500 name1 name2 keyword1 keyword2 如果使用者搜尋 keyword1或keyword2或name2或name1 我想返回bussid 5000.所以我應該使用這個查詢select from business ...