百萬數據量 MySQL 模糊搜索提速:如何在 512M 內存限制下優化查詢速度?

百萬數據量 MySQL 模糊搜索提速:如何在 512M 內存限制下優化查詢速度?

百萬數據量 mysql 模糊搜索提速

mysql 中,當數據量達到百萬級時,執行模糊查詢可能會變得非常緩慢。本文提供的解決方案無需借助第三方中間件,即可在 512m 的 Java 內存限制下顯著提升模糊搜索的速度。

基于索引表的方案

創建一個索引表,包含三列:”當前詞”、”下一詞”和”原記錄主鍵 id”。其中,”當前詞”和”下一詞”表示搜索關鍵詞中的連續單詞,”原記錄主鍵 id”指向滿足條件的原始記錄。

索引表結構

當前詞 下一詞 原記錄主鍵 id
mysql 1
1
1
1
1
1
1
null 1

搜索算法

搜索關鍵詞時,按順序查詢索引表,獲得滿足每個單詞條件的原記錄id。然后使用這些 id 在原始表中查找匹配記錄。

例:搜索“模糊搜索”

SELECT 原記錄主鍵ID   FROM (SELECT 原記錄主鍵ID FROM 索引表 WHERE 當前詞 = '模' AND 下一詞 = '糊')   JOIN (SELECT 原記錄主鍵ID FROM 索引表 WHERE 當前詞 = '糊' AND 下一詞 = '搜') USING(原記錄主鍵ID)   JOIN (SELECT 原記錄主鍵ID FROM 索引表 WHERE 當前詞 = '搜' AND 下一詞 = '索') USING(原記錄主鍵ID)   JOIN (SELECT 原記錄主鍵ID FROM 索引表 WHERE 當前詞 = '索' AND 下一詞 IS NULL) USING(原記錄主鍵ID)

jvm 優化

為了充分利用有限的內存,建議使用如下的jvm 優化技術:

  • 縮小永久代尺寸
  • 設置metaspace 垃圾回收參數(-xx:metaspacesize、-xx:maxmetaspacesize)
  • 使用壓縮引用和指針
  • 啟用分代垃圾回收

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享