我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql如何让左模糊查询也能走索引

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql如何让左模糊查询也能走索引

让左模糊查询也能走索引

测试表USER_INFO表数据以及结构如下

mysql如何让左模糊查询也能走索引

有一个USER_NAME字段的索引

mysql如何让左模糊查询也能走索引

有个业务需求,需要模糊搜索出用户名后几位有杰这个词的所有用户信息,这时候不可能说为了一个搜索就引入ES,但是如果sql使用左模糊查询的话,根据索引的最左匹配原则,该sql语句是不可能使用到idx_user_name索引的,如下:

EXPLAIN SELECT * from USER_INFO where USER_NAME like '%杰'

执行计划如下:

mysql如何让左模糊查询也能走索引

可以发现是用不到索引的。

需要做模糊匹配,又要用到索引,索引的最左匹配原则更是不能被打破,这时候可以增加一个字段,这个字段的内容等于USER_NAME字段内容的反转,同时加上这个字段的相关索引,如下:

mysql如何让左模糊查询也能走索引

mysql如何让左模糊查询也能走索引

此时如果是要模糊搜索出用户名后几位有杰这个词的所有用户信息,可以对REVERSE_USER_NAME字段做右模糊查询,效果其实就是和对USER_NAME字段做左模糊查询是一样的,因为二者的内容是相反的,结果如下:

SELECT * from USER_INFO where REVERSE_USER_NAME like '杰%'

执行计划如下:

mysql如何让左模糊查询也能走索引

小结一下:索引的最左匹配原则不能打破,那么要让左匹配也走索引的话,换个思路,让右匹配的效果和左匹配一样就好了,同时右匹配又能走索引,间接达到了左模糊查询也能走索引的目的。

模糊查询(like、instr)

SQL中经常会遇到模糊查询,现在模糊查询正常、最常用的有两种,一种是like、另一种是instr,这两种单单是简单的搜索,instr的效率是比like要高的(这也得看%在哪儿了)。

1. like

like中分右模糊、左模糊,右模糊比如’abc%‘时,扫描索引,高效。当模糊查询含左模糊时,比如’%abc’,进行全表扫描,低效。当然更别提’%abc%'了。

2. instr

instr(字段名, string),instr的使用也很简单,就是填写一下字段名,然后与后面需要查找的内容相关。这个比like的左模糊效率要高,但是要比右模糊还是相差不多的(因为在instr不分左右模糊)。

3. A>=’’ and A<’’

今天在搜索查找之时还找到了这么一个查找方法,这个方法要比上面的instr效率还要高,不过这个方法局限性还是比较高的。例如:

select * from formtable_main_200_dt1 where hth >= '16040610' and hth < '16040611'

这个方法只适用于字符型字段,且除了我们想要的字段外,还得加上一个超过此类型的,并且他只支持右模糊。但是在这几个当中就右模糊而言,他的效率是最高的。

3的补充讲解

在数据中进行字符的比较时发现自己并不是对此了解,这里记下这里字符的比较是比较的哪里。

这里的比较是比较的ASCII,但这不是比较的总的ASCII,而是一个字符一个字符的比较,例如我这里有数据库的字段为’123456123’,而要比较的还有’123456223’,这里进行比较,当到了61的1和62的2时就可以比较出大小了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql如何让左模糊查询也能走索引

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql如何让左模糊查询也能走索引

目录让左模糊查询也能走索引测试表USER_INFO表数据以及结构如下有一个USER_NAME字段的索引模糊查询(like、instr)1. like2. instr3. A>=’’ and A<’&rsq
2022-11-21

MySQL全文索引如何解决like模糊匹配查询慢的问题

这篇文章主要讲解了“MySQL全文索引如何解决like模糊匹配查询慢的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL全文索引如何解决like模糊匹配查询慢的问题”吧!需求需要模
2023-07-04

如何通过索引提升PHP与MySQL的模糊搜索和复杂查询效率?

摘要:在开发PHP与MySQL的应用程序中,模糊搜索和复杂查询是常见的需求。本文将介绍如何通过索引来提升PHP与MySQL的模糊搜索和复杂查询的效率,并提供具体的代码示例。一、索引的作用和优势索引是数据库中用于提高查询效率的重要工具。它可以
2023-10-21

Xunsearch搜索的自动完成与模糊查询实现(如何实现Xunsearch搜索的自动完成和模糊查询功能?)

Xunsearch搜索提供自动完成和模糊查询功能。自动完成根据输入实时返回匹配建议,通过Facet实例和词库文件实现。模糊查询允许用户输入存在拼写错误或近似关键字,通过BoolQuery和FuzzyQuery实例实现。优化词库文件、调整编辑距离、使用词干提取器和拼音查询等技巧可提升效果。示例代码展示了自动完成和模糊查询的实现过程。
Xunsearch搜索的自动完成与模糊查询实现(如何实现Xunsearch搜索的自动完成和模糊查询功能?)
2024-04-02

Xunsearch搜索的模糊查询与自动补全功能实现(如何实现Xunsearch的模糊查询和自动补全?)

Xunsearch模糊查询支持前缀和后缀匹配,可通过指定模糊符号实现。自动补全支持短语和文档标题建议,可通过指定类型参数实现。优化技巧包括过滤停用词、调整权重、限制距离,以及启用前缀和短语索引以提高效率。
Xunsearch搜索的模糊查询与自动补全功能实现(如何实现Xunsearch的模糊查询和自动补全?)
2024-04-02

MySQL中如何创建索引以提高查询性能

在MySQL中,可以使用CREATE INDEX语句来创建索引以提高查询性能。下面是一个示例:CREATE INDEX idx_lastname ON customers(last_name);这将在名为"customers"的表的"la
MySQL中如何创建索引以提高查询性能
2024-04-09

如何通过索引优化PHP与MySQL的大规模数据查询和高并发查询?

概述:在PHP与MySQL开发中,大规模数据查询和高并发查询是常见的需求。为了提高查询性能,我们可以通过索引优化来减少数据库的查询时间,从而提高系统的响应速度。本文将介绍如何通过索引优化来达到目标,并提供一些具体的代码示例。索引的基本概念和
2023-10-21

如何通过索引提升PHP与MySQL的多语言查询和高性能排序?

在开发多语言网站时,经常需要进行多语言查询和排序操作。而PHP和MySQL是常用的开发语言和数据库,如何通过索引提升多语言查询和高性能排序成为了一个关键问题。本文将通过具体代码示例介绍如何优化和加速这些操作。使用合适的字符集和校对规则在My
2023-10-21

编程热搜

目录