mysql內建了三種儲存引擎,分別是innodb
,myisam
和memory
,一般情況下,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 ...