首页
学习
活动
专区
圈层
工具
发布

mysql 模糊匹配的优化

基础概念

MySQL中的模糊匹配通常使用LIKE操作符来实现。LIKE操作符允许你使用通配符%和_来匹配任意数量的字符或单个字符。例如:

代码语言:txt
复制
SELECT * FROM users WHERE name LIKE '%john%';

优势

  • 灵活性:模糊匹配提供了灵活的方式来搜索包含特定模式的记录。
  • 易用性:对于非技术用户来说,使用LIKE语句比编写复杂的正则表达式更简单。

类型

  • 前缀匹配:使用LIKE 'pattern%',例如LIKE 'john%'。
  • 后缀匹配:使用LIKE '%pattern',例如LIKE '%john'。
  • 中间匹配:使用LIKE '%pattern%',例如LIKE '%john%'。

应用场景

  • 搜索功能:在用户输入部分关键字时,模糊匹配可以帮助找到相关的记录。
  • 数据验证:在某些情况下,可能需要验证数据是否符合某种模式。

优化问题及解决方案

问题:模糊匹配性能差

原因:

  • 模糊匹配通常会导致全表扫描,特别是在没有合适索引的情况下。
  • 使用%通配符在模式的开始位置会导致索引失效。

解决方案:

  1. 使用全文索引: MySQL的全文索引可以显著提高模糊搜索的性能。
  2. 使用全文索引: MySQL的全文索引可以显著提高模糊搜索的性能。
  3. 使用前缀匹配: 尽量使用前缀匹配,因为这样可以利用索引。
  4. 使用前缀匹配: 尽量使用前缀匹配,因为这样可以利用索引。
  5. 创建合适的索引: 如果必须使用中间匹配,可以考虑创建前缀索引。
  6. 创建合适的索引: 如果必须使用中间匹配,可以考虑创建前缀索引。
  7. 使用覆盖索引: 确保查询的字段都在索引中,这样可以避免回表查询。
  8. 使用覆盖索引: 确保查询的字段都在索引中,这样可以避免回表查询。
  9. 优化查询计划: 使用EXPLAIN来查看查询计划,并根据需要调整查询。
  10. 优化查询计划: 使用EXPLAIN来查看查询计划,并根据需要调整查询。

示例代码

代码语言:txt
复制
-- 创建全文索引
ALTER TABLE users ADD FULLTEXT(name);

-- 使用全文索引进行模糊搜索
SELECT * FROM users WHERE MATCH(name) AGAINST('john');

-- 创建前缀索引
CREATE INDEX idx_name ON users(name(20));

-- 使用前缀匹配
SELECT * FROM users WHERE name LIKE 'john%';

-- 创建覆盖索引
CREATE INDEX idx_name_full ON users(name);

-- 使用覆盖索引进行模糊搜索
SELECT id FROM users WHERE name LIKE '%john%';

参考链接

通过以上优化措施,可以显著提高MySQL模糊匹配的性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何加快MySQL模糊匹配查询

有时我会看到条件如下的模式匹配查询:“其中的字段名像'%something%'”。 MySQL不能为这些查询使用到索引,这意味着它必须每次都进行一次全表扫描。...由于使用了Trigram,我们正在寻找单词的一部分(如err或ier),可以有很多匹配。...正如我所说,更多的部分意味着更多的行。 我希望有更大的改进,所以我想知道我们还能做些什么。 由于前导%,MySQL不能使用索引。 我们如何避免这种情况?...磁盘上的大小: ? 正如我们预期的那样,他们将使用比原始表更多的空间。 缺点 两种解决方案都需要额外的表 该表包含数百万行的短行,并且可以使用几个空格。...结论 如果MySQL中没有内置的解决方案或索引可以帮助或解决您的问题,请不要放弃。很多时候,只需稍作修改,您就可以创建自己的索引表或使用其他技巧。

5.2K50

23:姓名模糊匹配优化:Levenshtein距离算法与模糊搜索

作者: HOS(安全风信子) 日期: 2026-03-15 主要来源平台: GitHub 摘要: 本文深入探讨了姓名模糊匹配的优化技术,重点分析了Levenshtein距离算法的原理和模糊搜索的实现...2025年,基于Levenshtein距离算法的优化版本在性能和准确性方面都有了大幅提升。同时,结合深度学习的模糊匹配模型也开始应用于实际场景,为姓名匹配提供了新的思路。...通过采用动态规划的优化实现,以及针对姓名匹配场景的特殊处理,使得算法在处理大量姓名数据时性能得到了大幅提升。 多语言姓名匹配:支持多语言姓名的模糊匹配,包括中文、英文、日文等多种语言。...实时性优化:通过硬件加速、算法优化等手段,进一步提高模糊匹配的实时性,满足实时识别的需求。 跨语言能力:增强系统的跨语言处理能力,支持更多语言的姓名匹配。...跨语言匹配困难: 解决方案:针对不同语言的特点进行优化;使用多语言训练的深度学习模型。 关键词: 死亡笔记,姓名模糊匹配,Levenshtein距离算法,模糊搜索,基拉,目标识别

63910
  • MySQL模糊查询性能优化

    结论写在最前面 用户基数估计 模糊查找接口qps估计 数据检索量估计 支持分布式搜索 支持短语搜索 支持分词 上述每一项都将是决定我们模糊查询最终的实现方案 业务场景分析 根据 模糊查找 的业务场景,比对一下上面列出的...业务背景 我们团队接到一个IEG市场部的一个内部系统开发,系统内填写工单时需要根据 rtx, 拼音, 中文名 模糊匹配用户,没错!...这就是传说中的大炮打蚊子啊! MySQL全文索引 首先检查你用的MySQL的版本,最好是5.6+。...-----+---------------+--------------+---------+------+------+-------------+ 1 row in set (0.01 sec) 模糊匹配策略...%查询中文名字段; 关键字查询接口返回结果做Redis缓存,缓存时间为120分钟; 所以我的解决方式:使用全文索引优化rtx和拼音的模糊查询,中文的模糊查询继续使用**LIKE %%**,最后再加一个Redis

    34.5K2216

    模糊匹配3.0

    这是时隔3个月的推文。 这是为感谢大家的支持,对去年发布的【模糊匹配工具】的进一步升级。...关于之前的推文可以在点这里查看: 解决文字模糊匹配的小工具 快速模糊匹配——速度提升几千倍!!! 模糊匹配工具2.0 使用场景不变,简单而言,即是匹配两列相似的文本。...这次升级,对这个输入过程进行了优化: 首先选择匹配的计算逻辑: 直接按下回车,将使用两列字段整体匹配方法,速度较快; 输入2,按回车,将使用逐行匹配的方法,速度较慢,可能更准。...【更新二】—— 优化匹配准确度——优化分词 前两版的分词依据是【辅助资料】文件夹里的【dict.txt】。文档共三列:词、词频、词性。...【更新三】—— 优化匹配准确度——自定义替代词 还有读者朋友提到,如果我需要匹配的文本具有同义词(或笔误、或别称),比如同义词a出现在A列,同义词b出现在B列,怎么办?

    3.8K20

    PostgreSQL pg_trgm中文模糊匹配优化技巧

    ⚙️ 二、中文优化思路总览 我们可以通过以下三种方案增强中文模糊搜索体验: ⚡ 方案一:优化 pg_trgm 参数 PostgreSQL 默认的相似度阈值 similarity_threshold 可微调...张晓明 0.33 ✅ 命中 张三 0.25 ✅ 命中 李四 0.05 ❌ 过滤 适用场景: 轻量模糊搜索(如昵称、客户名、地名),无需额外插件即可显著提升匹配率。...高性能搜索服务 ✅ pg_trgm + zhparser 混合 准确 + 高速 十二、进一步优化方向 可结合 RUM 索引(更高效的相似度排序) ⚙️ 对高并发搜索场景,可结合 Redis 缓存...query 结果 对跨字段模糊匹配,可将字段合并生成统一 tsvector 字段索引 结语 pg_trgm 在中文环境中虽然不是完美方案,但经过参数调整、全文检索结合和中文分词增强,已经足以满足绝大多数企业级模糊搜索需求...你可以把它看作 PostgreSQL 世界里的 “轻量 Elasticsearch” —— 不需要引入外部系统,也能实现高速、精准的模糊匹配。

    1.2K10

    文本模糊匹配

    文本模糊匹配主要是指对两段文本含义相近程度的计算,当我们需要处理的数据集比较多样或者是未标准化的脏数据时,通过模糊匹配主要实现的是去除重复值的操作。...高级的模糊匹配涉及到的是自然语言处理的一部分内容,这里所说的模糊匹配则是一种相对比较简单的匹配方式,例如两个相近的表达方式(‘underground’ ‘subway’),一些可能出现的拼写错误和较小的语法错误或句法偏移...fuzz.partial_ratio(str1,str2):返回两个字符串表达相同含义可能(返回值1-100),这种方法会对子字符串进行一个匹配,也可以对一些意思相近的词语进行一个更好的识别 token_sort_ratio...:匹配时不考虑单词顺序 process :有限选项中部分数据杂乱的匹配效果比较好 实际应用过程中选用哪种方法需要视情况而定,对于一些表述上有微小差别意思却有巨大差别的数据(‘does’,‘doesn...’t’),使用第一种方法进行匹配会得到相对比较低的得分,这也是我们需要注意的。

    3.2K20

    模糊匹配后台

    模糊匹配 如何进行模糊匹配,是困扰许多人的问题。有很多种方式可以进行模糊匹配,我也写过这方面的文章《如何进行模糊匹配》。虽然使用kettle也能解决一部分问题,但这远远不够。...我一直在思考着,使用其他的方式来实现更容易被其他平台调用的服务。在前几个月,实现了一般比较简单的模糊匹配服务,匹配效果还可以。但是效率太低,自己玩玩还可以,并不能满足大批量的匹配需求。...所以,需要继续进行优化。 目前的匹配效率 如下图所示,响应时间基本都在毫秒级,完全能够满足业务需求! ? 接下来要做的事情 从匹配效果上来说,没有最好,对技术的追求,是无止境的。...所以接下来需要继续对匹配的算法进行优化,做出高质量的匹配引擎。同时继续对匹配的架构进行优化,让匹配服务可以处理更多的高并发请求。...写给彷徨 如果每天都在做机械性的工作,也许会在繁重的工作下压垮自己的身心。但如果有点自己的爱好,有点自己的兴趣,就可以在工作之外,有个值得自己奋斗的目标。

    2.9K20

    React路由的模糊匹配与严格匹配

    模糊匹配模糊匹配是React Router的默认匹配方式。在模糊匹配中,路由会根据URL的路径部分进行匹配。当URL的路径部分与路由的路径部分部分匹配时,就会触发匹配。...下面是一个模糊匹配的示例代码:import React from 'react';import { BrowserRouter as Router, Route, Link } from 'react-router-dom...在Route组件中,我们使用path属性指定路由的路径。exact属性用于指定该路由是否需要进行精确匹配,默认为模糊匹配。...例如,当URL为/时,会触发对应的Home路由组件,因为它与path="/" 模糊匹配。同样,当URL为/about时,会触发About路由组件,因为它与path="/about"模糊匹配。...严格匹配严格匹配要求URL的路径必须与路由的路径完全匹配。只有当URL的路径与路由的路径完全相同时,才会触发匹配。

    3.4K20

    不引入ES,如何利用MySQL实现模糊匹配

    从技术层面需要考虑实现的功能点:分词与库里已有数据进行匹配按照匹配度对结果进行排序分词功能有现成的分词器,所以整个需求的核心重点在于如何与数据库中的数据匹配并按照匹配度排序。3....模糊匹配技术选型方案一:引入ES方案二:利用MySQL实现本系统规模较小,单纯为了实现这个功能引入ES成本较大,还要涉及到数据同步等问题,系统复杂性会提高,所以尽量使用MySQL已有的功能进行实现。...MySQL提供了以下三种模糊搜索的方式: like匹配:要求模式串与整个目标字段完全匹配; RegExp正则匹配:要求目标字段包含模式串即可; Fulltext全文索引:在字段类型为CHAR,VARCHAR...针对于这个场景,记录数目相对来说没有那么多,所以对于效率稍低的结果可以接受,因此技术选型方面采用RegExp正则匹配来实现模糊匹配的需求。4. 实现效果展示5....2, ''))计算出companyName中关键词出现的次数。通过这种方式,我们可以根据匹配程度进行排序,匹配次数越多的公司名称排序越靠前。

    82110

    模糊匹配工具答疑

    之前发过一个用于文本模糊匹配的工具,详见以下四篇文章: 解决文字模糊匹配的小工具 快速模糊匹配——速度提升几千倍 模糊匹配工具2.0 模糊匹配3.0 更新完3.0之后,大家反馈还是会存在一些小问题。...这里统一解答可能存在的问题。 1. 检查匹配列有没有空的单元格 一列中间的空单元格会导致匹配运算出错,无法执行下去。 2....检查匹配列有没有纯数字 位数较多的数字,如1236789234,不影响程序运行,如果是1、2、33这样位数少的会导致运算失败。可添加简单文字使之变成文本。 3....检查Excel的工作表 最新版的程序,会读取excel的工作表,比如一个工作簿里有如下三个工作表,程序都会检索出来: 但程序还有一个前提条件,即该工作簿必须有多个工作表,才能顺利检索。...另外,由于用户的表可能经过各种版本excel和wps表格的交替编辑,可能导致有兼容性问题,所以比较保险的解决办法是,新建一个Excel文档,里面通常会自动包含Sheet1、Sheet2和Sheet3,再把需要匹配的表复制进任意一个工作表或新工作表里

    2.5K30

    模糊匹配工具2.0

    01 之前发过两篇关于模糊匹配工具的说明,《解决文字模糊匹配的小工具》和《快速模糊匹配——速度提升几千倍!!!》...,解决以下这类场景: 北京通州 匹配 北通、北京市通州区、北京通州区或北京市通州 只要两组数据实际上存在匹配的可能性(即表1里某个名称A在表2中确实有另一个类似的名称存在),都能匹配出来。...举例展示这个工具的效果: 例子1: 2k*2k行,总耗时3秒(快的低至1秒)。作为对比,在Power Query里使用合并的方式进行模糊匹配,2k*2k行,时间预计5分钟左右。...标准示例如下: G:\Project\匹配表1.xlsx,电视表,频道节目1,G:\Project\匹配表2.xlsx,Sheet1,频道节目2 dict.txt文件不存在 有读者反馈程序运行后出现类似这样的提示...03 升级版的工具可以在本公众号后台回复【模糊匹配】四个字获取。也欢迎大家在后台留言反馈问题和分享使用心得。

    2.3K20

    【模糊匹配提示下拉】

    ** 模糊匹配提示下拉 ** 实现步骤 前端输入框改进: 使用带有自动完成功能的输入框组件(例如 el-autocomplete),以便在用户输入时显示建议列表。...当用户输入 1 到 4位数字时,触发模糊查询建议。 后端 API 支持: 创建一个 API 端点,用于根据输入的尾号查询数据库中的箱号。 该端点应接受输入的尾号,并返回匹配的数据列表。...数据库查询优化: 从 数据 表中预先读取所有市区,并在内存中进行匹配,以提高性能。 当用户选择具体市区时,使用精确查询;否则,使用模糊查询。...输入小于 4 位:当用户输入 1 到 4 位数字时,系统会根据尾号进行模糊匹配,并显示建议列表。如果用户未从建议列表中选择,则使用模糊查询。...性能优化:通过预先读取数据并在内存中进行匹配,减少数据库查询次数,提高响应速度。

    46710

    Kibana查询语言(KQL)AND、OR匹配,模糊匹配

    查询数据库,如果是MySQL,那么就需要使用MySQL的语法;同样的,在Kibana上查询数据,也需要使用Kibana的语法,而Kibana的查询语法叫做Kibana Query Language,简称...使用索引匹配查询 ​ 在Kibana中进行查询的时候,建议使用指定索引查询,这样的效率更高,而不建议使用全局查找的方式。...如果要查询1200或者2001,这种模糊匹配的,可以使用通配符,比如 response:*200 或者 response:200* 实例2 message:"hello world yes" 上面这个表达式...个单词会被作为一个词进行查询,不会再进行分词,也就是说匹配的时候只会匹配hello world yes这样的顺序匹配,而不会匹配出helllo yes world; 实例3 message:hello...五.总结 KQL还是比较简单地,主要记住KQL匹配时是不区分大小写的,可以使用括号改变匹配优先级; 另外一个要点就是,匹配是 包含,某个字段“包含”某个词,而不是某个字段的值为某个词。

    15.3K23

    Postgresql模糊匹配案例(包括中文前后模糊)

    经常被问到为什么模糊匹配不走索引,验证几种情况(Pg9.4.18) 构造测试数据 create table test(id int, info text); insert into test select...如果只有后模糊的查询需求(字符串 like ‘%abc’ 等价于 reverse(字符串) like ‘cba%’), 使用collate "C"的reverse()表达式的b-tree索引;当collate...如果有前后模糊查询需求,并且包含中文,请使用lc_ctype "C"的数据库,同时使用pg_trgm插件的gin索引。 (只有TOKEN分割正确效果才是OK的。...如果有前后模糊查询需求,并且不包含中文,请使用pg_trgm插件的gin索引。 如果有正则表达式查询需求,请使用pg_trgm插件的gin索引。...如果有输入条件少于3个字符的模糊查询需求,可以使用GIN表达式索引,通过数组包含的方式进行搜索,性能一样非常好。

    3.4K50
    领券