mysql 斯文克斯 mysql 全文索引

2021-10-18 00:10:57 字數 1567 閱讀 9412

使用索引是資料庫效能優化的必備技能之一。在mysql資料庫中,有四種索引:聚集索引(主鍵索引)、普通索引、唯一索引以及我們這裡將要介紹的全文索引(fulltext index)。

全文索引(也稱全文檢索)是目前搜尋引擎使用的一種關鍵技術。它能夠利用「分詞技術「等多種演算法智慧型分析出文字文字中關鍵字詞的頻率及重要性,然後按照一定的演算法規則智慧型地篩選出我們想要的搜尋結果。在這裡,我們就不追根究底其底層實現原理了,現在我們來看看在mysql中如何建立並使用全文索引。

在mysql中,建立全文索引相對比較簡單。例如,我們有乙個文章表(article),其中有主鍵id(id)、文章標題(title)、文章內容(content)三個字段。現在我們希望能夠在title和content兩個列上建立全文索引,article表及全文索引的建立sql語句如下:

--建立article表

create table article (

id int unsigned auto_increment not null primary key,

title varchar(200),

content text,

fulltext (title,content)--在title和content列上建立全文索引

上面就是在建立表的同時建立全文索引的sql示例。此外,如果我們想要給已經存在的表的指定字段建立全文索引,同樣以article表為例,我們可以使用如下sql語句進行建立:

--給現有的article表的title和content欄位建立全文索引

--索引名稱為fulltext_article

alter table article

add fulltext index fulltext_article (title,content)

在mysql中建立全文索引之後,現在就該了解如何使用了。眾所周知,在資料庫中進行模糊查詢是使用like關鍵字進行查詢,例如:

select *from article where content like '%查詢字串%'

那麼,我們使用全文索引也是這樣用的嗎?當然不是,我們必須使用特有的語法才能使用全文索引進行查詢。例如,我們想要在article表的title和content列中全文檢索指定的查詢字串,可以如下編寫sql語句:

select *from article where match(title,content)against('查詢字串')

強烈注意:mysql自帶的全文索引只能用於資料庫引擎為myisam的資料表,如果是其他資料引擎,則全文索引不會生效。此外,mysql自帶的全文索引只能對英文進行全文檢索,目前無法對中文進行全文檢索。如果需要對包含中文在內的文字資料進行全文檢索,我們需要採用sphinx(斯芬克斯)/coreseek技術來處理中文。本站將會在後續文章中對sphinx以及coreseek進行介紹。

備註1:目前,使用mysql自帶的全文索引時,如果查詢字串的長度過短將無法得到期望的搜尋結果。mysql全文索引所能找到的詞的預設最小長度為4個字元。另外,如果查詢的字串包含停止詞,那麼該停止詞將會被忽略。

備註2:如果可能,請盡量先建立表並插入所有資料後再建立全文索引,而不要在建立表時就直接建立全文索引,因為前者比後者的全文索引效率要高。

**

mysql 不用斯芬克斯 全域性模糊匹配 查詢

問題是match against對中文模糊搜尋支援不是太好 新建乙個utf8 myisam型別的表並建立乙個全文索引 create table articles id int unsigned auto increment not null primary key,title varchar 200...

mysql 全表掃瞄 mysql的全表掃瞄

在mysql查詢中,如果表沒有索引的話,當查詢執行時,需要從第一行資料到最後一行資料進行全表掃瞄。索引的目的就是輔助查詢能快速定位到目標資料,然後獲取查詢結果。那麼表是否有了索引就一定能加以應用,而不會進行全表掃面了呢?現實肯定不是這樣的 1 全表掃瞄的場景 使用explain分析sql時,當列出執...

mysql全表掃瞄 mysql 全表掃瞄場景

全表掃瞄是資料庫搜尋表的每一條記錄的過程,直到所有符合給定條件的記錄返回為止。通常在資料庫中,對無索引的表進行查詢一般稱為全表掃瞄 然而有時候我們即便新增了索引,但當我們的sql語句寫的不合理的時候也會造成全表掃瞄。以下是經常會造成全表掃瞄的sql語句及應對措施 1.使用null做為判斷條件 如 s...