MySQL中like模糊查詢如何優化?

大家好,我是鋒哥。今天分享關于【MySQL中like模糊查詢如何優化?】面試題。希望對大家有幫助;

MySQL中like模糊查詢如何優化?

1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網

在 MySQL 中,LIKE 模糊查詢雖然非常常見,但通常會影響查詢的性能,尤其是在數據量較大時。為了優化 LIKE 查詢,減少查詢的開銷,可以采取以下幾種方法:

1.?使用前綴匹配(避免?%?開頭)

  • LIKE 查詢中模式以 % 開頭時,MySQL 無法使用索引,因為它無法確定從哪里開始搜索。這會導致全表掃描,從而嚴重影響性能。

    不推薦

    SELECT * FROM users WHERE name LIKE '%john';
    

    優化: 如果可能,盡量避免以 % 開頭的查詢,而是使用前綴匹配。這樣 MySQL 可以利用索引進行優化。

    SELECT * FROM users WHERE name LIKE 'john%';
    
    • 使用前綴匹配時,MySQL 可以利用索引(如果列上有索引),從而加速查詢。

2.?使用全文索引(FULLTEXT)

  • 如果你的查詢模式包含的是大量文本數據,考慮使用 全文索引 (FULLTEXT)。這可以顯著提高文本搜索的性能,尤其適用于大規模的文本字段搜索。

    • 適用范圍:CHAR,?VARCHAR?和?TEXT?類型的字段。
    • 全文索引優化查詢時,MATCH()?和?AGAINST()?語法比?LIKE?更高效。

    創建全文索引

    ALTER TABLE users ADD FULLTEXT(name);
    

    使用全文索引查詢

    SELECT * FROM users WHERE MATCH(name) AGAINST ('john' IN NATURAL LANGUAGE MODE);
    
    • 注意FULLTEXT?索引適用于自然語言模式或布爾模式的查詢,通常能比?LIKE?更高效,尤其是在處理大量文本數據時。

3.?使用?REGEXP?替代復雜的?LIKE

  • 如果你的查詢需要進行復雜的模式匹配,REGEXP(正則表達式)有時比?LIKE?更靈活,雖然在某些情況下性能上也可能較差。為了提高效率,可以優化正則表達式或考慮其他替代方案。

4.?使用索引優化查詢

  • 為了提高 LIKE 查詢的效率,確保查詢字段上有索引。如果查詢的是一個大表中的字段,創建索引可以顯著提升性能。

    創建索引

    CREATE INDEX idx_name ON users(name);
    
    • 前綴索引:如果你的查詢只是檢查字段的前幾個字符,可以使用前綴索引來優化性能。比如在?VARCHAR(255)?字段上建立一個只索引前 10 個字符的索引。
    CREATE INDEX idx_name_prefix ON users(name(10));
    

5.?避免使用?LIKE?查詢中的通配符?%

  • 盡量避免使用?%?通配符,因為它會導致全表掃描。盡量使用明確的查詢條件。例如:
    • LIKE 'john%'?比?LIKE '%john%'?更容易利用索引,尤其是在大表中。

6.?結合?LEFT()?或?SUBSTRING()?進行字段截取

  • 在一些特定的場景中,如果你只需要查詢字段的前幾個字符,可以使用?LEFT()?或?SUBSTRING()?來加速查詢。
    SELECT * FROM users WHERE LEFT(name, 4) = 'john';
    
  • 這種方式可以提高效率,因為它避免了使用?%?通配符。

7.?調整?innodb_ft_min_token_size(如果使用全文索引)

  • 在使用 MySQL 的全文索引時,如果查詢內容是短詞或者需要查詢更短的單詞,可以通過調整 innodb_ft_min_token_size 參數來優化全文索引的性能。

    • 默認情況下,MySQL 對全文索引的最小單詞長度有限制(默認值是 4)。你可以將其調整為較小的值來優化查詢。
    SET GLOBAL innodb_ft_min_token_size = 3;
    

8.?考慮分表或分區表

  • 如果表非常大,考慮對表進行分區或分表處理。這有助于減小查詢的范圍,從而提高?LIKE?查詢的效率。分表或分區能夠顯著提升特定查詢的性能,尤其是在查詢時涉及大量數據時。

9.?避免過多的?OR?語句

  • 在多個條件的?LIKE?查詢中,如果使用多個?OR?語句,可能會導致性能問題。可以嘗試使用?IN?或?JOIN?替代多個?LIKE,或者盡量將條件限制在更小的范圍內。

總結

LIKE 查詢的性能優化主要通過以下幾種方式進行:

  • 盡量避免使用?%?開頭的?LIKE?查詢。
  • 使用全文索引(FULLTEXT)來優化文本搜索。
  • 使用前綴索引來加速以特定前綴開頭的?LIKE?查詢。
  • 使用正則表達式或其他方法替代復雜的?LIKE?查詢。
  • 調整數據庫配置(如?innodb_ft_min_token_size)來優化全文索引的使用。

通過這些方法,可以在 MySQL 中對 LIKE 查詢進行有效的優化,提升查詢效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/71941.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71941.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/71941.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

?LeetCode(數學分類) 2. 兩數相加——暴力與優化?

?LeetCode(數學分類) 2. 兩數相加——暴力與優化? 提示&#xff1a; 每個鏈表中的節點數在范圍 [1, 100] 內 0 < Node.val < 9 題目數據保證列表表示的數字不含前導零 題解&#xff1a; 暴力與優化&#xff0c;暴力即轉換為十進制解題&#xff0c;優化即直接在鏈表上進…

①Modbus TCP轉Modbus RTU/ASCII網關同步采集無需編程高速輕松組網

Modbus TCP轉Modbus RTU/ASCII網關同步采集無需編程高速輕松組網https://item.taobao.com/item.htm?ftt&id784749793551 MODBUS TCP 通信單元 MODBUS TCP 轉 RS485 MS-A1-50X1 系列概述 MS-A1-50X1 系列概述 MS-A1-50X1系列作為MODBUS TCP通信的服務器進行動作。可通…

基于PyTorch的深度學習——機器學習3

激活函數在神經網絡中作用有很多&#xff0c;主要作用是給神經網絡提供非線性建模能力。如果沒有激活函數&#xff0c;那么再多層的神經網絡也只能處理線性可分問題。 在搭建神經網絡時&#xff0c;如何選擇激活函數&#xff1f;如果搭建的神經網絡層數不多&#xff0c;選擇si…

力扣:找到一個數字的 K 美麗值(C++)

一個整數 num 的 k 美麗值定義為 num 中符合以下條件的 子字符串 數目&#xff1a; 子字符串長度為 k 。子字符串能整除 num 。 給你整數 num 和 k &#xff0c;請你返回 num 的 k 美麗值。 注意&#xff1a; 允許有 前綴 0 。0 不能整除任何值。 一個 子字符串 是一個字符串里…

C/C++藍橋杯算法真題打卡(Day3)

一、P8598 [藍橋杯 2013 省 AB] 錯誤票據 - 洛谷 算法代碼&#xff1a; #include<bits/stdc.h> using namespace std;int main() {int N;cin >> N; // 讀取數據行數unordered_map<int, int> idCount; // 用于統計每個ID出現的次數vector<int> ids; …

<建模軟件安裝教程1>Blender4.2系列

Blender4.2安裝教程 0注意&#xff1a;Windows環境下安裝 第一步&#xff0c;百度網盤提取安裝包。百度網盤鏈接&#xff1a;通過網盤分享的文件&#xff1a;blender.zip 鏈接: https://pan.baidu.com/s/1OG0jMMtN0qWDSQ6z_rE-9w 提取碼: 0309 --來自百度網盤超級會員v3的分…

C語言八股---預處理,編譯,匯編與鏈接篇

前言 從多個.c文件到達一個可執行文件的四步: ??預處理–>編譯–>匯編–>鏈接 預處理 預處理過程就是預處理器處理這些預處理指令(要不然編譯器完全不認識),最終會生成 main.i的文件 主要做的事情有如下幾點: 展開頭文件展開宏條件編譯刪除注釋添加行號等信息保留…

用Deepseek寫一個 HTML 和 JavaScript 實現一個簡單的飛機游戲

大家好&#xff01;今天我將分享如何使用 HTML 和 JavaScript 編寫一個簡單的飛機游戲。這個游戲的核心功能包括&#xff1a;控制飛機移動、發射子彈、敵機生成、碰撞檢測和得分統計。代碼簡潔易懂&#xff0c;適合初學者學習和實踐。 游戲功能概述 玩家控制&#xff1a;使用鍵…

面向高質量視頻生成的擴散模型方法-算法、架構與實現【附核心代碼】

目錄 算法原理 架構 代碼示例 算法原理 正向擴散過程&#xff1a;從真實的視頻數據開始&#xff0c;逐步向其中添加噪聲&#xff0c;隨著時間步 t 的增加&#xff0c;噪聲添加得越來越多&#xff0c;最終將原始視頻數據變成純噪聲。數學上&#xff0c;t 時刻的視頻數據與 t…

水下機器人推進器PID參數整定與MATLAB仿真

水下機器人推進器PID參數整定與MATLAB仿真 1. PID控制原理 目標:通過調節比例(P)、積分(I)、微分(D)參數,使推進器輸出力快速穩定跟蹤期望值。傳遞函數(示例):推進器動力學模型可簡化為: [ G(s) = \frac{K}{\tau s + 1} \cdot e^{-Ts} ] 其中:K為增益,τ為時間常…

游戲引擎學習第149天

今日回顧與計劃 在今天的直播中&#xff0c;我們將繼續進行游戲的開發工作&#xff0c;目標是完成資產文件&#xff08;pack file&#xff09;的測試版本。目前&#xff0c;游戲的資源&#xff08;如位圖和聲音文件&#xff09;是直接從磁盤加載的&#xff0c;而我們正在將其轉…

Java函數式接口四部曲之Consumer

Consumer 是一個函數式接口&#xff0c;位于 java.util.function 包中。它表示一個接受單個輸入參數并且不返回任何結果的操作。Consumer 通常用于需要對輸入參數執行某些操作但不產生返回值的場景。 Consumer 接口定義了一個抽象方法&#xff1a;accept(T t)&#xff1a;接受…

ForceMimic:以力為中心的模仿學習,采用力運動捕捉系統進行接觸豐富的操作

25年3月來自上海交大盧策吾教授團隊的論文“ForceMimic: Force-Centric Imitation Learning with Force-Motion Capture System for Contact-Rich Manipulation”。 在大多數接觸豐富的操作任務中&#xff0c;人類會將隨時間變化的力施加到目標物體上&#xff0c;以補償視覺引…

【愚公系列】《Python網絡爬蟲從入門到精通》045-Charles的SSL證書的安裝

標題詳情作者簡介愚公搬代碼頭銜華為云特約編輯&#xff0c;華為云云享專家&#xff0c;華為開發者專家&#xff0c;華為產品云測專家&#xff0c;CSDN博客專家&#xff0c;CSDN商業化專家&#xff0c;阿里云專家博主&#xff0c;阿里云簽約作者&#xff0c;騰訊云優秀博主&…

vulnhub靶場【digitalworld.local系列】的electrical靶機

前言 靶機&#xff1a;digitalworld.local-electrical&#xff0c;IP地址為192.168.10.12&#xff0c;后期因為卡頓&#xff0c;重新安裝&#xff0c;ip地址后面為192.168.10.11 攻擊&#xff1a;kali&#xff0c;IP地址為192.168.10.6 kali采用VMware虛擬機&#xff0c;靶機…

macos 程序 運行

sudo xattr -r -d com.apple.quarantine [/Applications/Name]使用stow 管理配置文件

多視圖幾何--結構恢復--三角測量

三角測量 1. 核心公式推導 假設兩個相機的投影矩陣為 P P P 和 P ′ P P′&#xff0c;對應的匹配圖像點(同名點)為 ( u , v ) (u, v) (u,v) 和 ( u ′ , v ′ ) (u, v) (u′,v′)&#xff0c;目標是求解三維點 X [ X x , X y , X z , 1 ] T X [X_x, X_y, X_z, 1]^T X…

共享內存的原理和創建

目錄 共享內存的原理 共享內存的創建 代碼實現創建 共享內存的管理指令 我們今天來學習共享內存&#xff01;&#xff01;&#xff01; 共享內存的原理 兩個進程同時使用內存中開辟的共享空間進行通信就是建立并使用共享內存進行進程間的通信。System V 共享內存&#xf…

3.10[A]cv

核心模塊&#xff1a; rasterizer&#xff1a;光柵化器&#xff0c;負責三角形遍歷和像素繪制Shader&#xff1a;包含頂點著色器和多種片元著色器Texture&#xff1a;紋理處理模塊 頂點著色器的計算量一般遠小于片元著色器。因為組成三角形的頂點相對有限&#xff0c;而片元需…

mac使用Homebrew安裝miniconda(mac搭建python環境),并在IDEA中集成miniconda環境

一、安裝Homebrew mac安裝brew 二、使用Homebrew安裝miniconda brew search condabrew install miniconda安裝完成后的截圖&#xff1a; # 查看是否安裝成功 brew list環境變量&#xff08;無需手動配置&#xff09; 先執行命令看能不能正常返回&#xff0c;如果不能正常…