MySQL中比like语句更高效的写法locate,position,instr,find_in_set,in

mysql locate不走索引_面试--mysql的模糊查询优化、like、locate、position、instr、find_in_set... 困扰很久的一个事情,一次面试的时候,在mysql的一个表中有个字段存的值是 “#床垫#白色#2*3” 类似的字段。面试官让我匹配下 #白色 的所有数据,我当时第一反应就是通过 like 来处理,然后他说还有没有别的方法。我想了下就说 find_in_set但是它的配置值必须要是用逗号隔开,所以应该不满足。后面这个问题确实困扰了我,我就各种查找有效的方法,今天就总结下,MySQL的模糊查询,以后的多... 阅读详情

mysql 中 find_in_set() 方法:

让我们先列举一个示例:

1. 测试代码:   

2. CREATE TABLE `test` (  

3.   `id` int(8) NOT NULL auto_increment,  

4.   `name` varchar(255) NOT NULL,  

5.   `list` varchar(255) NOT NULL,  

6.   PRIMARY KEY  (`id`)  

7. )  

8. 

9. INSERT INTO `test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');  

10. INSERT INTO `test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');  

11. INSERT INTO `test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu');  

12.   

13. test1:sql = select * from `test` where 'daodao' IN (`list`);  

14. 得到结果空值.  

15. test2:sql = select * from `test` where FIND_IN_SET('daodao',`list`);  

16. 得到三条数据。 

17. Test3:sql = select * from `test` where `list` like '%daodao%'; 

18. 得到三条数据。 

 

比较:

In比较是否相等、可以利用索引

find_in_set比较是否包含,是精确匹配,字段值以英文”,”分隔、 find_in_set 是全表扫描的

like是广泛的模糊匹配,字符串中没有分隔符、

like本身效率就比较低,应该尽量避免查询条件使用like;对于like ‘%...%’(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低;另外,由于匹配算法的关系,模糊查询的字段长度越大,模糊查询效率越低。

解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like ‘…%’,是会使用索引的;左模糊like

 

find_in_set用法:

FIND_IN_SET(str, list);

Str为指定字符串,list为范围字符串(list需使用英文”,”分隔)

当任意一个参数为NULL,返回NULL

当list为空字符串或者str在list中不存在,返回0

Str在list中存在,返回1-N

举例:

Select FIND_IN_SET(‘b’,  ‘a,b,c,d’);  ->2

你是否一直在寻找比MySQL的LIKE语句更高效的方法的,下面我就为你介绍几种。

LIKE语句
SELECT `column` FROM `table` where `condition` like`%keyword%'


事实上,可以使用 locate(position) 和 instr这两个函数来代替

LOCATE语句
SELECT `column` from `table` where locate(‘keyword’,`condition`)>0


或是 locate 的別名 position
POSITION语句
SELECT `column` from `table` where position(‘keyword’ IN`condition`)


或是
INSTR语句
SELECT `column` from `table` where instr(`condition`, ‘keyword’)>0


locate、position 和 instr 的差別只是参数的位置不同,同时locate多一个起始位置的参数外,两者是一样的。
mysql> SELECT LOCATE(‘bar’, ‘foobarbar’,5);

-> 7

速度上这三个比用 like 稍快了一点。


工业嵌入式电源路径设计:TPS259483与PIC32MX协同防护实战 电源路径是嵌入式系统可靠性的底层基石,其本质是电压、电流、时序与噪声耦合的物理过程。理解电源路径需从基本概念出发:它并非理想导线,而是受寄生参数、温漂、EMI和器件动态特性共同影响的非线性通路。其核心原理在于硬件保护(如电子保险丝的dV/dt控制)与固件监控(如MCU ADC实时采样)的深度协同,技术价值体现在抗浪涌、防误触发、自适应阈值等鲁棒性提升。典型应用场景覆盖PLC、伺服驱动、环境监测等需通过IEC 61000-4-5 Level 3测试的工业设备。本文聚焦TPS259483AYWPR与PIC32M 阅读详情

相关推荐

MySQL中如何高效的实现模糊查询(附30条优化建议)

然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。14、并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段 sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来。

m0_71777195的博客 1万+

mysql 模糊查询语句比较(LIKE、instr、locate、find_in_set、position)

大家都知道mysql 模糊查询的常用方法是LIKE 但这个语句查询效率很慢,那么有没有比较好的方法呢,下面本人测试了几个语句 测试数据800条左右 1, 测试结果用时0.06s 2 locate()用时0.02s 3 find_in_set() 用时0.02s 4 instr instr() 用时0.03 根据本人测试 结果可能数据量...

angzhan5306的博客 869

SQL实现数据仓库ETL:分层设计、增量抽取与性能优化实践

在数据仓库建设过程中,ETL(抽取、转换、加载)是数据流转的核心环节。传统观点常将ETL与专业工具或大数据框架绑定,但在中小规模数据场景下,基于SQL的ETL方案凭借低门槛、高可维护性和直观的排错体验,成为高效且务实的选择。本文从ETL的基础概念出发,阐述数据仓库分层(ODS、DWD、DWS、ADS)中每层ETL的定位与职责,重点剖析增量抽取策略(时间戳、主键、日志)下的SQL实现方式,以及数据清洗、去重和格式化的常见写法。同时,结合真实项目经验,分享慢SQL优化技巧、任务调度依赖设计、幂等性保障和常见问题

weixin_33290540的博客 346

Mysql函数INSTR、LOCATE、POSITION VS LIKE

Mysql函数INSTR、LOCATE、POSITION VS LIKE

奋斗、 909

【IEEE】从Accept到Online:详解Proof校样阶段的关键操作与避坑指南

本文详细解析了IEEE论文从Accept到Online的Proof校样阶段关键操作流程与避坑指南。重点介绍了IEEE Author Gateway平台的使用技巧、校样稿首页的风险点检查,以及多人协作校对策略,帮助作者高效完成论文出版前的最后审核,确保学术成果准确呈现。

weixin_30591551的博客 360

AI 赋能测试全生命周期:多 Agent 协同的自动化提效方案

本文提出了一种基于Coze平台的多Agent协同测试解决方案,旨在解决软件测试中PRD解析不清晰、测试点覆盖不全、用例编写效率低、代码生成耗时等痛点。通过PRD优化、测试点生成、测试用例生成和单元测试框架生成四个Agent的协同工作,结合Cursor工具实现从需求到代码的全链路自动化。以电商平台登录模块为例,展示了从模糊PRD到标准化测试用例和可执行Java单元测试代码的完整转化流程。该方案通过AI赋能显著提升测试效率,减少人工干预,实现测试覆盖率≥95%,为快速迭代的软件研发提供了高效的测试自动化支持。

QINJIEEE的博客 1103

SQL之查询函数LOCATE、POSITION、INSTR、FIND_IN_SET、IN、LIKE

LOCATE() 返回要查询的字符串在被查询字符串里第一次出现的位置 注:当在 MySQL 4.0 中时,如有任一参数是一个二进制字符串,它才是字母大小写敏感的 LOCATE(substr,str) 返回substr字符串在str里第一次出现的位置,没有返回0 SELECT LOCATE('.',t.str)FROM `table` t; >5LOCATE(substr,str,

lly983909814的博客 2万+

【tips】在PyCharm中安装opencv图文版详细教程

pip如下图所示,左边的蓝色图标就是终端。点开终端后,键入命令,按下回车后就开始下载了。如果你更喜欢图形化操作,可以在 PyCharm 中直接安装:。点击右上角的 +按钮(添加包)。搜索或,点击。

zhousanguhe的博客 6744

MySQL中比like语句更高效的写法locate position instr find_in_set

你是否一直在寻找比MySQL的LIKE语句更高效的方法的,下面我就为你介绍几种。

Websites 3856

Qt C++ 电子海图与作战叠加(Overlay)系统

lab_pos->setText(QString("坐标: X%1 Y%2").arg(p.x(),0,'f',0).arg(p.y(),0,'f',0));lab_distance->setText(QString("距离: %1 海里").arg(dist,0,'f',1));lab_bearing->setText(QString("方位: %1°").arg(bear,0,'f',1));// 绘制S-57海图基底。scene->addText("封锁线").setPos(450,180);

寒寒豆豆软件公司的博客 496

【异常】Claude CLI / Claude Code 命令行工具 “claude 不是内部或外部命令“ 报错完整解决方案

摘要:Windows系统执行Claude命令报错"'claude'不是内部或外部命令",主要原因是环境变量配置问题。解决方案包括:1)通过npm全局安装时需加-g参数并重启终端;2)检查Node.js环境及npm全局路径是否加入系统PATH;3)对于Claude Code独立安装版,需手动添加.local/bin路径到环境变量。常见错误包括安装不完整、权限不足或路径未自动配置,按照对应场景排查即可解决。

奶爸的编程之路,也就一周冷个三天 7820

MySQL中比like语句更高效的写法locate/position/instr/find_in_set

1、LIKE       SELECT `column` FROM `table` where `condition` like`%keyword%' 事实上,可以使用 locate(position) 和 instr这两个函数来代替 2、LOCATE语句      SELECT `column` from `table` where locate(‘keyword’,`c

老刘的博客 660

为什么devc++编译项目会失败?提示gcc无法正常启动...

根据你的描述,编译能正常进行时,只打开源文件并没有问题,问题主要出现在创建项目后编译失败,这通常与 Makefile 配置、环境变量、编译器路径设置等因素有关。你可以检查 Makefile 配置,验证 DevC++ 的编译器环境设置,或者尝试清理并重新配置项目。如果问题仍然存在,可以尝试重装 DevC++ 或重新配置工具链。希望如上措施及解决方案能够帮到有需要的你。

**My Coding Family** 1376

mysql locate 和 like_MySQL比like语句更高效的写法locate position instr find_in_set

LIKE语句SELECT `column` FROM `table` where `condition` like`%keyword%‘事实上,可以使用 locate(position) 和 instr这两个函数来代替一、LOCATE语句SELECT `column` from `table` where locate(‘keyword’,`condition`)>0二、或是 locate ...

weixin_35906775的博客 2638

智能体开发套件(ADK)介绍

city } ---") city_normalized = city . lower() . replace(" " , "") # 模拟天气数据库 mock_weather_db = {

lpfasd123的博客 1409

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MySQL比like语句更高效的写法locate、position、instr find_in_set

https://blog.youkuaiyun.com/u012843873/article/details/78458920 你是否一直在寻找比MySQL的LIKE语句更高效的方法的,下面我就为你介绍几种。 LIKE语句 SELECT `column` FROM `table` where `condition` like `%keyword%' 事实上,可以使用locate(position) 和 i...

业精于勤荒于嬉;行成于思,毁于随。 489

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

mysql中Mysql模糊查询like效率,以及更高效的写法和sql优化方法

in_array的效率 in_array函数是个糟糕的选择。应该尽量用isset函数或array_key_exists函数来替代 。in_array函数的复杂度是O(n),而isset函数的复杂度是O(1) isset函数是检测变量是否设置。 返回值: 若变量不存在则返回FALSE 若变量存在且其值为NULL,也返回FALSE 若变量存在且值不为NULL,则返回TURE 同时检查多个变量时,每个单项都符号上一条要求时才返回TRUE,否则结果为FALSE PHP的empty()函数 格式:.

IT技术宅-北方的刀郎 5089

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MySQL比like语句更高效的写法locate position instr find_in_set

你是否一直在寻找比MySQL的LIKE语句更高效的方法的,下面我就为你介绍几种。 LIKE语句 SELECT `column` FROM `table` where `condition` like `%keyword%' 事实上,可以使用locate(position) 和 instr...

chenglinxie1229的博客 193

mysql之模糊查询的方法

想起Mysql模糊查询正常情况下我们想到的一般都是like,但是使用like,格式正确了效率很快,当然这是在数据量比较小的情况下,问题是在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时mysql查询的效率是很关键的,也是很重要的。 一、一般情况下 like 模糊查询的写法: 这个SQL语句,如果用explain解释的话,我们很容易就能发觉它是没有走索引搜索,而是对...

zuihongyan518的博客 8万+
上一篇: $_POST 、$HTTP_RAW_POST_DATA、php://input用法比对
下一篇: PHP内置方法大全--全局变量骗
NoBugExists
博客等级 码龄9年 8粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值