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

看板Database (資料庫)作者 (小心一點)時間7年前 (2017/08/15 15:21), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串14/18 (看更多)
大家午安 目前也是遇到 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,目前已經在內部測試了... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 202.39.58.43 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1502781684.A.33D.html

08/15 16:49, , 1F
建議你往資料規劃的角度想, 避開LIKE
08/15 16:49, 1F

08/15 16:51, , 2F
例如關鍵字分析、資料正規化、資料快取 等 都可以發揮
08/15 16:51, 2F

08/15 17:48, , 3F
select * from table where column like '%aaaa%' union
08/15 17:48, 3F

08/15 17:49, , 4F
select * from table where columne like '%bbbb%'
08/15 17:49, 4F

08/15 17:51, , 5F
透過 union 將多個關鍵字like 結果聯集一起取代or方式
08/15 17:51, 5F
文章代碼(AID): #1Pag3qCz (Database)
討論串 (同標題文章)
文章代碼(AID): #1Pag3qCz (Database)