Re: [SQL ] 如何改善 LIKE '%search%' 的效能?

作者: liisi (小心一點)   2017-08-15 15:21:21
大家午安
目前也是遇到 like '%關鍵字%' 效能會變差的問題
網站的商品數 超過一百萬筆
網站的使用族群 是所有消費者
透過關鍵字 來模糊搜尋商品名稱 甚至是二個以上的關鍵字來搜尋
( 商品名稱 like '%關鍵字A%' or 商品名稱 like '%關鍵字B%' )
測試過時間 需要 2 ~ 2.4秒左右
爬文了 也google過 了解如果把%放在前頭 會讓索引無效
我也自己試了一下 '關鍵字%' 時間0.0005秒 (也差太多了....)
但是關鍵字搜尋 不太可能用 like '關鍵字%'找資料
用其他的語法 locate試了一下 也是很慢
想請問大家 在語法的部分 目前還沒辦法解決嗎?
※ 引述《DarkKiller (System hacked)》之銘言:
: ※ 引述《statue (statue)》之銘言:
: : AND Name1 LIKE '%怒氣藥水%'
: : Name1 是 varchar(255) utf-8 編碼的欄位.
: : 這樣子查詢的結果會比對 WIDB 整個表格, 像是資料有 22179 就會比對這麼多次.
: MySQL 的 %...% 一定是 table scan,如果資料是拉丁語系資料,用 MySQL
: 提供的 fulltext index 做。
: 如果是 CJK 用專門的 fulltext search engine 做,像 Lucene (或 CLucene),
: 另外還需要了解一些目前切詞常用到的基礎原理。
: ==
: 另外我自己幫 pixnet 架的是 Xapian,目前已經在內部測試了...
作者: SeanBoog (施吉祥先生)   2017-08-15 16:49:00
建議你往資料規劃的角度想, 避開LIKE例如關鍵字分析、資料正規化、資料快取 等 都可以發揮
作者: tracy217 (T大)   2017-08-15 17:48:00
select * from table where column like '%aaaa%' unionselect * from table where columne like '%bbbb%'透過 union 將多個關鍵字like 結果聯集一起取代or方式

Links booklink

Contact Us: admin [ a t ] ucptt.com