看板 Database 關於我們 聯絡資訊
大家午安 目前也是遇到 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
SeanBoog: 建議你往資料規劃的角度想, 避開LIKE 08/15 16:49
SeanBoog: 例如關鍵字分析、資料正規化、資料快取 等 都可以發揮 08/15 16:51
tracy217: select * from table where column like '%aaaa%' union 08/15 17:48
tracy217: select * from table where columne like '%bbbb%' 08/15 17:49
tracy217: 透過 union 將多個關鍵字like 結果聯集一起取代or方式 08/15 17:51