当前位置: 首页 > news >正文

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)。这可以显著提高文本搜索的性能,尤其适用于大规模的文本字段搜索。

    • 适用范围:CHARVARCHAR 和 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 查询进行有效的优化,提升查询效率。

相关文章:

MySQL中like模糊查询如何优化?

大家好,我是锋哥。今天分享关于【MySQL中like模糊查询如何优化?】面试题。希望对大家有帮助; MySQL中like模糊查询如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中,LIKE 模糊查询虽然非常常见,…...

用低代码平台集成人工智能:无需专业开发也能实现智能化

引言:人工智能的普及与企业需求 随着人工智能(AI)技术的飞速发展,越来越多的企业开始意识到其在提升运营效率、优化客户体验和推动业务创新方面的巨大潜力。从智能客服到自动化决策支持,从数据分析到个性化推荐&#x…...

【使用hexo模板创建个人博客网站】

使用hexo模板创建个人博客网站 环境准备node安装hexo安装ssh配置 使用hexo命令搭建个人博客网站hexo命令 部署到github创建仓库修改_config.yml文件 编写博客主题扩展 环境准备 node安装 进入node官网安装node.js 使用node -v检查是否安装成功 安装成功后应该出现如上界面 …...

最简单圆形进度条实现CSS+javascript,两端带圆弧

两端是弧形的圆形进度条。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title…...

vuejs 模板语法、条件渲染、v-for、事件处理、表单输入绑定

创建vue项目之后我们就可以开始写代码了&#xff0c;我们的代码一般都会写在src目录-components目录-HelloWord.vue文件内。 我们之前写的HTML文件的结构是HTML代码可以集成或者连接外部的css/js文件。 我们通过vue建立的项目&#xff0c;它的结构是在一个vue文件内集成了HTML…...

论文阅读方法

文章目录 步骤一&#xff1a;对论文进行自我判断阅读题目和关键词。阅读摘要阅读总结要点 步骤二&#xff1a;阅读文章阅读图表和图表的注释阅读引言阅读实验部分阅读结果和作者对结果的讨论&#xff08;创新点&#xff09;要点 步骤三&#xff1a;精度论文回答问题1回答问题2回…...

问题解决:Kali Linux 中配置启用 Vim 复制粘贴功能

在 Kali Linux 系统中&#xff0c;使用 XShell 或其他类似终端时&#xff0c;Vim 编辑器的默认设置并不支持直接进行复制和粘贴操作&#xff0c;这对于日常的开发工作或渗透测试人员来说可能会造成不便。幸运的是&#xff0c;通过简单的配置调整&#xff0c;可以让 Vim 轻松支持…...

Linux hexdump命令

hexdump 是 Linux 中一个强大的二进制文件查看工具&#xff0c;可以用于查看文件的十六进制、ASCII 或其他格式的转储内容。以下是常见用法及示例&#xff1a; 1. 查看文件头部&#xff08;前 N 个字节&#xff09; 语法 hexdump -n <字节数> -C <文件名>示例&am…...

Stable Diffusion教程|快速入门SD绘画原理与安装

什么是Stable Diffusion&#xff0c;什么是炼丹师&#xff1f;根据市场研究机构预测&#xff0c;到2025年全球AI绘画市场规模将达到100亿美元&#xff0c;其中Stable Diffusion&#xff08;简称SD&#xff09;作为一种先进的图像生成技术之一&#xff0c;市场份额也在不断增长&…...

系统架构设计师—系统架构设计篇—微服务架构

文章目录 概述优势挑战 概述 微服务是一种架构风格&#xff0c;将单体应用划分成一组小的服务&#xff0c;服务之间相互协作&#xff0c;实现业务功能&#xff0c;每个服务运营在独立的进程中&#xff0c;服务间采用轻量级的通信机制协作&#xff08;通常是HTTP/JSON&#xff0…...

Array and string offset access syntax with curly braces is deprecated

警告信息 “Array and string offset access syntax with curly braces is deprecated” 是 PHP 中的一个弃用警告&#xff08;Deprecation Notice&#xff09;&#xff0c;表明在 PHP 中使用花括号 {} 来访问数组或字符串的偏移量已经被标记为过时。 背景 在 PHP 的早期版本…...

腾讯元宝:AI 时代的快速论文阅读助手

1. 背景与需求 在 AI 研究领域&#xff0c;每天都会涌现大量学术论文。如何高效阅读并提取关键信息成为研究者的一大难题。腾讯元宝是腾讯推出的一款大模型&#xff0c;结合了**大语言模型&#xff08;LLM&#xff09;和自然语言处理&#xff08;NLP&#xff09;**技术&#x…...

基于单片机的风速报警装置设计

标题:基于单片机的风速报警装置设计 内容:1.摘要 本设计聚焦于基于单片机的风速报警装置&#xff0c;旨在解决传统风速监测缺乏实时报警功能的问题。采用单片机作为核心控制单元&#xff0c;结合风速传感器采集风速数据。经实验测试&#xff0c;该装置能准确测量 0 - 60m/s 范…...

1998-2022年各地级市第一产业占GDP比重/地级市第一产业占比数据(市辖区)

1998-2022年各地级市第一产业占GDP比重/地级市第一产业占比数据&#xff08;市辖区&#xff09; 1、时间&#xff1a;1998-2022年 2、指标&#xff1a;地级市第一产业占GDP比重/地级市第一产业占比 3、来源&#xff1a;城市统计年鉴 4、范围&#xff1a;299个地级市 5、缺…...

IntersectionObserver接口介绍

IntersectionObserver API 是浏览器提供的一个用于异步观察目标元素与其祖先元素或视口&#xff08;Viewport&#xff09;交叉状态&#xff08;即是否进入或离开视口&#xff09;的接口。在 IntersectionObserver 出现之前&#xff0c;开发者通常需要通过监听 scroll 事件或使用…...

go并发学习笔记

包含了go学习笔记,含有channel的基础学习&#xff0c;编写数字的平方&#xff0c;如何成组的合并channel&#xff0c;如何优雅的关闭退出并发协程&#xff0c;通道阻塞情况分析&#xff0c;channel与哪些变成情况&#xff0c;可谓是收藏好文. 文章目录 并发1&#xff1a;chann…...

DeepSeek V3 源码:从入门到放弃!

从入门到放弃 花了几天时间&#xff0c;看懂了DeepSeek V3 源码的逻辑。源码的逻辑是不难的&#xff0c;但为什么模型结构需要这样设计&#xff0c;为什么参数需要这样设置呢&#xff1f;知其然&#xff0c;但不知其所以然。除了模型结构以外&#xff0c;模型的训练数据、训练…...

关于C++数据类型char的类型是整数的思考

学习数据类型时&#xff0c;整数类型中有一个特殊的类型char&#xff0c;可以使用字符来为其赋&#xff0c;也可以用整数来为其赋值&#xff0c;这是怎么一回事&#xff1f;其实任何类型&#xff0c;在计算机的内存中&#xff0c;在最小的存储单元比特中&#xff0c;内部只有0或…...

手写识别革命:Manus AI如何攻克多语言混合识别难题(二)

一、多语种特征分离&#xff1a;对抗训练与解耦表示 1. 梯度反转层&#xff08;GRL&#xff09;实现语言无关特征提取 class GradientReversalFn(Function):staticmethoddef forward(ctx, x, alpha):ctx.alpha alphareturn x.view_as(x)staticmethoddef backward(ctx, grad_…...

windows:curl: (60) schannel: SEC_E_UNTRUSTED_ROOT (0x80090325)

目录 1. git update-git-for-windows 报错2. 解决方案2.1. 更新 CA 证书库2.2. 使用 SSH 连接&#xff08;推荐&#xff09;2.3 禁用 SSL 验证&#xff08;不推荐&#xff09; 1. git update-git-for-windows 报错 LenovoLAPTOP-EQKBL89E MINGW64 /d/YHProjects/omni-channel-…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...

Android Framework预装traceroute执行文件到system/bin下

文章目录 Android SDK中寻找traceroute代码内置traceroute到SDK中traceroute参数说明-I 参数&#xff08;使用 ICMP Echo 请求&#xff09;-T 参数&#xff08;使用 TCP SYN 包&#xff09; 相关文章 Android SDK中寻找traceroute代码 设备使用的是Android 11&#xff0c;在/s…...