mysql FullText全文索引的問題

2021-09-08 16:51:00 字數 727 閱讀 7987

今天有同學問題,搜尋ip的時候怎樣能把 

select ip from tabelx where ip like

'%192.168.0.1%

'

這種句子的效能優化。

的確,使用 like %x 的方式,資料庫沒辦法使用索引,一定會進行整表掃瞄,所以我們需要避免這種方法。之前同事叫我嘗試一下用 match() against 的方法。於是順便試了試,

——前提:全文索引只支援myisam表

select

*from `data`.`test` where match (ip) against('

192')

這樣搜尋出來沒有結果。google了一會兒,發現網上的例子都是搜尋英文單詞的,於是在ip裡面混了點英文單詞試了一下,有結果。

再google後發現,mysql預設對全文檢索有單詞的字元限制,即:

ft_max_word_len 84

ft_min_word_len 4 

所以這裡的ip沒法搜尋,因為用 . 分隔的會被當成是乙個單詞,ip只有3位。

於是把ft_min_word_len修改為1,重啟mysqld服務,修復表,重建索引,搜尋成功。

這裡並不是支援這樣搜尋ip,ip搜尋一般把ip位址存成 unsigned int,然後用轉換函式進行搜尋,參考:

下面是關於全文檢索的一些介紹:

---to be continue

MySQL FullText索引 實踐。

首先mysql5.7版本開始提供了對 fulltext 全文索引的支援,全文索引其實就是對模糊 查詢及跨列查詢的乙個優化方案 比如我們有乙個資訊表 z 我們要查詢 資訊表中a列含 xx 字元和b列含有 xx 字元的所有行 我們通常是這樣 select from z where a like xx a...

sql server 全文搜尋(全文索引)

參考 按照鏈結方式建立全文索引 使用 全文查詢使用全文謂詞 contains 和 freetext 以及全文函式 containstable 和 freetexttable 它們支援複雜的 transact sql 語法,這種語法支援各種形式的查詢詞。若要編寫全文查詢,必須了解何時以及如何使用這些謂...

用全文函式替代全文謂詞優化全文索引查詢

有程式設計師跑來說我們的群組最近好像有些卡。看看記憶體 cpu都還算正常,io也沒有比平時高多少。總體上沒什麼問題,接下來看看細的。於是用 profiler 抓了一把 duration超過1 秒的儲存過程,抓了 20來分鐘,竟然乙個都沒有。好傢伙,看樣子在我們平日的精心呵護下,那些儲存過程跑得還算可...