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

MySQL中like模糊查询如何优化

在MySQL中like模糊查询可能会导致性能问题,特使是当使用通配符%开头时,因为这通常会导致全表扫描,以下方法可以帮助优化like模糊查询

本文以支付交易表t_pay为例

CREATE TABLE `t_pay` (`id` int unsigned NOT NULL AUTO_INCREMENT,`pay_no` varchar(50) NOT NULL COMMENT '支付流水号',`order_no` varchar(50) NOT NULL COMMENT '订单流水号',`user_id` int DEFAULT '1' COMMENT '用户账号ID',`amount` decimal(8,2) NOT NULL DEFAULT '9.90' COMMENT '交易金额',`deleted` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '删除标志,默认0不删除,1删除',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`),KEY `idx_pay_no` (`pay_no`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='支付交易表';

在这里插入图片描述

1.使用前缀匹配

使用like ‘XXX%’(%在后的形式),这种情况MYSQL会走索引

SELECT * from t_pay where pay_no like 'a2%'

在这里插入图片描述
但是使用like ‘%XXX’,这种情况MySQL不会走索引

SELECT * from t_pay where pay_no like '%a2'

在这里插入图片描述

2.使用反向索引

对于实际需要匹配后缀的情况(like ‘%XXX’),可以创建一个辅助列存储反转后内容,并基于此列进行前缀匹配

ALTER TABLE t_pay add reversed_pay_no varchar(50);
update t_pay set reversed_pay_no = REVERSE(pay_no);
CREATE INDEX idx_reversed_pay_no ON t_pay(reversed_pay_no);SELECT * from t_pay where reversed_pay_no like '2a%'

在这里插入图片描述

3.限制扫描范围

在有like查询中,若可以通过其他条件进一步缩小搜索范围,应尽量加入这些条件

SELECT * from t_pay where create_time >'2025-07-09 09:00:00'  and pay_no like 'a2%'

在这里插入图片描述

4.使用缓存

对于经常需要查询的,可考虑在应用层实施缓存策略减少数据库负载,如使用Redis等

5.使用专业工具

对于非常大的数据集或需要复杂文本处理或搜索功能,可使用外部全文搜索引擎如ES,Solr等

http://www.dtcms.com/a/478466.html

相关文章:

  • 400G QSFP112 FR4光模块:高速数据中心互联的核心力量
  • 旅行商问题(TSP)(1)(Route.py)(TSP 问题中的点与路径核心类)
  • 学习笔记--文件上传
  • Leetcode 26
  • 淘宝领券网站怎么做上海工程咨询行业协会
  • 泰国网站域名wordpress建网站的优点
  • 解锁 JavaScript 字符串补全魔法:padStart()与 padEnd()
  • Spring Boot 3零基础教程,IOC容器中组件的注册,笔记08
  • TDengine 数学函数 DEGRESS 用户手册
  • 源码:Oracle AWR报告之Top 10 Foreground Events by Total Wait Time
  • 告别繁琐坐标,让公式“说人话”:Excel结构化引用完全指南
  • 【AI论文】CoDA:面向协作数据可视化的智能体系统
  • 从AAAI2025中挑选出对目标检测有帮助的文献——第六期
  • 【深度学习】反向传播
  • 网站开发交接新闻源发稿平台
  • 滴答时钟延时
  • 【C++篇】:ServiceBus RPC 分布式服务总线框架项目
  • 后训练——Post-training技术介绍
  • 获取KeyStore的sha256
  • Linux (5)| 入门进阶:Linux 权限管理的基础规则与实践
  • 常见压缩包格式详解:区别及在不同系统中的解压方式
  • 【数学 进制 数位DP】P9362 [ICPC 2022 Xi‘an R] Find Maximum|普及+
  • .net过滤器和缓存
  • 张家港网站建设培训班电力建设专家答疑在哪个网站
  • 零基础学AI大模型之大模型的“幻觉”
  • 网站快速优化排名排名c语言入门自学零基础
  • MySQL排序规则utf8mb4_0900_ai_ci解析
  • 做网站别名解析的目的是什么同城广告发布平台
  • GPT4Free每日更新的免登录工作AI提供商和模型列表
  • 网站群建设座谈会云浮新增病例详情