1. 程式人生 > >一種優化mysql select like %%的方法

一種優化mysql select like %%的方法

問題:mysql like %XXX%使得資料庫引擎不能使用索引,而導致select查詢緩慢。200M的表select like需要1s左右,這是實時性要求高的伺服器承受不了的。

解決方法:首先google一通發現,都在說like很難優化,一般都是採用開源外掛分詞+全文索引。然後再搜尋,又搜尋到了clucene,研究了下clucene,發現用它的人都是重新實現的分詞模組,這樣如果不實現中文分詞模組,clucene的作用也不大。如果搜尋的字串長度不大的話,比如是搜尋文章標題,那麼自己來實現分詞模組也不是很難。下面的方法就是針對這類需求而實現的。

基本原理是:把mysql配置檔案中的ft_min_word_len=3改為1。(沒有這項就直接新增),然後新建一個欄位來保持分詞結果,給這個欄位建立全文索引。然後實現一個分詞模組,把詞語“大家好”拆分為“大 大家 大家好 家 家好 好”。然後用match .. against 來代替like %%,查詢出來的結果跟like的結果基本相同(如果分詞合理的話),但是效率比like高至少10倍以上。

相關推薦

優化mysql select like %%的方法

問題:mysql like %XXX%使得資料庫引擎不能使用索引,而導致select查詢緩慢。200M的表select like需要1s左右,這是實時性要求高的伺服器承受不了的。 解決方法:首先google一通發現,都在說like很難優化,一般都是採用開源外掛分詞+全文索引

模糊查詢的MySQLlike更好的搜尋引擎

有的時候,我們一開始不可能準確地知道搜尋的關鍵字在 Solr 中查詢出的結果是什麼,因此,Solr 還提供了幾種型別的模糊查詢 Solr從資料庫中讀取資料並建立索引速度 一次性建立索引 在JVM記憶體配置為256M時,建立索引至

解決MySQL主從不一致的方法

這裡分享一個MySQL主從庫因為某張表資料不一致的解決方法,我們可能會遇到這種情況:例項A和B是主從,可能由於誤操作或者某種原因導致A和B某張表資料不一致,可能就會導致主從複製停止,這時我們有很多種解決辦法,比如忽略掉某個錯誤,跳過events,設定slave_exec_m

讓天下沒有難用的資料庫 » 大資料分頁的優化方法

通常應用需要對錶中的資料進行翻頁,如果資料量很大,往往會帶來效能上的問題: [email protected] 07:16:25>select count(*) from  reply_0004 where thread_id = 5616385 and deleted = 0; +

實現mysql裡自增序列的方法

最近工作中遇到一個需求,需要設計一個自增欄位,當每插入一條記錄的時候,該欄位加1,但是由於種種原因,該欄位無法作為primary key存在,這樣就需要該欄位實現為一個自增序列。 mysql中的auto_increment可以實現自增長,其起始值是可以指定的,步長固定就是1

Qt之自定義搜索框——QLineEdit裏增加一個Layout,還不影響正常輸入文字(好像是比較通吃的方法

too 步驟 set box 文本 csdn sub void 鼠標 簡述 關於搜索框,大家都經常接觸。例如:瀏覽器搜索、Windows資源管理器搜索等。 當然,這些對於Qt實現來說毫無壓力,只要思路清晰,分分鐘搞定。 方案一:調用QLineEdit現

數據庫查詢速度慢了?是否是因為死鎖了?解決死鎖的方法

-- 檢索 blog kill _id exe 進行 xxx 通過 --查詢哪些表被死鎖 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sy

排序_快速排序_另取劃分點的方法

交換 ++ new 改進 break value 進行 ins man 最基本的劃分點由數組的最後一個值來確定,現在是將數組的最後一個值的前一個數值作為劃分點,但是需要經過三項取一方法的變換,最後它位置上的值是三個中最大的。 public class ArrayIns {

機器不學習:提升預測能力的方法-機器學習模型

範圍 和集 最重要的 機器 免費 現實 良好的 例子 永恒 機器不學習 jqbxx.com -機器學習好網站 沒有哪個機器學習模型可以常勝,如何找到當前問題的最優解是一個永恒的問題。 幸運的是,結合/融合/整合 (integration/ combinat

Kossel的滑塊位置計算方法

定義 運行 pos 平面 當前 並不是 post then 傳感器 做了一個小激光雕刻機之後,研究了一下這款3D打印機的結構和工作原理,一下就對這個運動過程很感興趣,這三個桿是怎麽聯動使得噴頭保持在一個平面上運動呢?打算先做一個架構,然後把激光器放在上面不是

生成動態口令的方法

JavaScript 動態口令 'use strict' let MD5 = require('blueimp-md5'); let UUIDv1 = require('uuid/v1'); const T = 30; let secret = &#

高效的QPS統計方法

循環數組 eset 指數 yun return hashmap await spa 全面 一、概述 對QPS的統計,通常是對一秒內各線程通過數據處理鏈中某一個切入點的次數進行累加計數。且不論采用何種方式都繞不開鎖,那如何結合QPS統計的場景,減少線程之間對鎖的競爭,是各實現

180720_有效的日期計數方法

2個 class 元素 年月日 ++ 多重 月份 存儲 lin 最近在學習C#,昨天老師布置了一個作業,輸入年月日,返回這一天是一年中的第幾天。 大致分析了一下,想出了一種方法,大致思路如下:   使用 switch 檢測月份得出該月長度;   根據年份決定二月長度;   

快速卷積實現方法

本文基於論文Fast Algorithms for Convolutional Neural Networks,並且整理了相關知識點。 我們首先了解一下傅立葉變換: 對於連續型傅立葉變換的頻域核時域轉換公式: 對於離散的傅立葉變換: 關於傅立葉的理解 可以看這篇文章

【模式識別與機器學習】——3.9勢函式法:確定性的非線性分類方法

目的   用勢函式的概念來確定判別函式和劃分類別介面。 基本思想   假設要劃分屬於兩種類別ω1和ω2的模式樣本,這些樣本可看成是分佈在n維模式空間中的點xk。 把屬於ω1的點比擬為某種能源點,在點上,電位達到峰值。 隨著與該點距離的增大,電位分佈迅速減小,即把樣本xk附近空間x點上的電位分佈,看

呼叫dll的巧妙方法

直接上程式碼,後面說應用場景 新建一個專案,引入需要呼叫的dll,如下 class Program { [DllImport( "soft.dll" )] static extern int CreditTrans( StringBuilder strin,

稀疏矩陣的實現方法

本文簡單描述了一種稀疏矩陣的實現方式,並與一般矩陣的實現方式做了效能和空間上的對比 矩陣一般以二維陣列的方式實現,程式碼來看大概是這個樣子: // C# public class Matrix { // methods // elements

SpringBoot的事務中奇怪問題以及處理方法

Transaction註解在Spring中是事務,事務呢,簡單來說,就是放在一起的一組SQL操作。 那麼事務和普通的SQL有什麼不太一樣的地方呢? 原子性 (要麼全做,要麼不做) 一致性 (事務中的資料要一致,在有些時候是會出現不一致的情況的) 永續性 (這

怎麼通過郵箱發超大附件?介紹基於雲服務的方法

合作伙伴第5次催促時,10G的CAD圖紙才傳了67%;又一次,寫好郵件上傳附件時,被通知檔案太大無法上傳;郵件傳送出去的會議資料,永遠不知道誰沒有檢視,還要電話通知一遍…… 工作中,你肯定遇到過上述類似的情況。檔案太大、傳輸緩慢、無法跟蹤檔案狀態,再加上懸在頭頂的deadline,隨便一種情況都足以讓我們焦

Faster R-CNN網路的另優化思路:cascade R-CNN網路詳解

論文:Cascade R-CNN: Delving into High Quality Object Detection 論文地址:https://arxiv.org/pdf/1712.00726.pdf Github專案地址:https://github.com/zhaoweicai/