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

mysql 高效模糊搜索

基础概念

MySQL中的高效模糊搜索通常指的是使用LIKE语句或者更高级的查询技术来执行包含通配符的搜索。LIKE语句可以与百分号(%)和下划线(_)一起使用,以实现模糊匹配。百分号代表任意数量的字符,而下划线代表单个字符。

相关优势

  1. 灵活性:模糊搜索允许用户输入部分信息来查找相关记录。
  2. 用户体验:提供更加友好的搜索体验,尤其是对于用户不确定完整信息的情况。
  3. 数据恢复:在数据备份和恢复过程中,模糊搜索可以帮助快速定位特定的记录。

类型

  1. 简单模糊搜索:使用LIKE语句。
  2. 全文搜索:使用MySQL的全文索引功能。
  3. 正则表达式搜索:使用REGEXP或RLIKE语句。

应用场景

  • 电子商务网站的商品搜索。
  • 社交网络平台上的用户搜索。
  • 日志管理系统中的错误信息检索。

遇到的问题及解决方法

问题:为什么模糊搜索的性能很差?

原因:

  • 模糊搜索通常会导致全表扫描,尤其是在没有适当索引的情况下。
  • 使用LIKE '%keyword%'这样的搜索模式无法利用索引,因为百分号在前表示任意长度的字符。

解决方法:

  1. 使用全文索引:
  2. 使用全文索引:
  3. 使用前缀索引: 如果可以接受限制搜索模式(例如,只搜索以特定字符开头的记录),可以使用前缀索引。
  4. 使用前缀索引: 如果可以接受限制搜索模式(例如,只搜索以特定字符开头的记录),可以使用前缀索引。
  5. 优化查询: 尽量避免在LIKE语句中使用百分号在前面的模式,如果必须使用,考虑将数据预处理成可以索引的形式。
  6. 使用外部搜索引擎: 对于大规模数据和高性能要求,可以考虑使用Elasticsearch或Apache Solr等外部搜索引擎。

示例代码

代码语言:txt
复制
-- 创建全文索引
ALTER TABLE articles ADD FULLTEXT(title, content);

-- 执行全文搜索
SELECT id, title, content FROM articles WHERE MATCH(title, content) AGAINST('database');

-- 创建前缀索引
ALTER TABLE users ADD INDEX idx_username (username(20));

-- 使用前缀索引进行搜索
SELECT id, username FROM users WHERE username LIKE 'john%';

参考链接

通过上述方法和策略,可以显著提高MySQL中的模糊搜索效率。

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

相关·内容

MySQL模糊搜索的几种姿势

导读:本文对MySQL中几种常用的模糊搜索方式进行了介绍,包括LIKE通配符、RegExp正则匹配、内置字符串函数以及全文索引,最后给出了性能对比。 ?...01 引言 MySQL根据不同的应用场景,支持的模糊搜索方式有多种,例如应用最广泛的可能是Like匹配和RegExp正则匹配,二者虽然用法和原理都很相似,但实际上匹配原则却不尽相同,其中Like要求模式串与整个目标字段完全匹配才检索该记录...对于简单的判断模式串是否存在类型的模糊搜索,应用MySQL内置函数即可实现,例如Instr()、Locate()、Position()等。...本文不过多展开正则表达式相关介绍,仅在Like的基础上,简单介绍其与Like模糊搜索方式的区别。...words REGEXP '^hello'; 内置函数 对于包含某些特定模式串的模糊搜索,可以通过MySQL内置函数实现。

4.4K20

前端-模糊搜索

这是搜索关键字 cfg时,会自动匹配到 config方法 同样,我们再看另一个例子 ?...通过关键字 bi会匹配到好几个结果 这个和一些编辑器的搜索功能很像,比如 sublime text,不需要知道关键字的完整拼写,只需要知道其中的几个字母即可。 那么这个功能在前端我们如何去实现呢?..., 然后拿这个正则去测试要搜索的列表,把符合要求的选项给拿出来即可 考虑到要高亮结果,我们还要生成对应的替换表达式,最后的函数如下 var escapeRegExp = /[-#$^*()+[]{}|\...reg,        replacement: replacer.join('')    };    return info; }; 调用 KeyReg把关键字传入,拿返回值的 regexp去检测搜索的列表...到目前为止我们只实现了搜索功能,按更优的体验来讲,在搜索结果中,要优先把相连匹配的放在首位,如 bi关键字,要把 bind结果放到 beginUpdate前面。第二个截图是有优化的地方的。

1.8K10
  • 整合ElasticSearch实现数据模糊搜索(Logstash同步Mysql数据)

    前言 本文介绍了如何整合搜索引擎elasticsearch与springboot,对外提供数据查询接口。...业务介绍 我的个人网站需要对mysql数据库内存储的京东商品进行模糊查询(模仿淘宝商品搜索),所以选择了将数据导入elasticsearch随后使用他来进行关键词查询。...前端只需发送用户搜索的关键词和分页参数(可选),即可返回商品数据(json格式) 开发环境 组件介绍: elasticsearch:搜索引擎,用于存储待搜索数据 logstash:用于将mysql中的商品数据同步到搜索引擎中...pm_backend下的表pm_jd_item内的全部京东商品数据 详细步骤参考: http://blog.codecp.org/2018/04/16/Elasticsearch之使用Logstash导入Mysql...数据: http://blog.codecp.org/2018/04/16/Elasticsearch之使用Logstash导入Mysql数据/

    6.6K31

    整合ElasticSearch实现数据模糊搜索(Logstash同步Mysql数据)

    实战系列 前言 本文介绍了如何整合搜索引擎elasticsearch与springboot,对外提供数据查询接口。...业务介绍 我的个人网站需要对mysql数据库内存储的京东商品进行模糊查询(模仿淘宝商品搜索),所以选择了将数据导入elasticsearch随后使用他来进行关键词查询。...前端只需发送用户搜索的关键词和分页参数(可选),即可返回商品数据(json格式) 开发环境 组件介绍: elasticsearch:搜索引擎,用于存储待搜索数据 logstash:用于将mysql中的商品数据同步到搜索引擎中...http://blog.codecp.org/2018/04/16/Elasticsearch%E4%B9%8B%E4%BD%BF%E7%94%A8Logstash%E5%AF%BC%E5%85%A5Mysql...最终编写的jdbc.conf为: schedule => "* * * * *"默认为每分钟同步一次 input { jdbc { jdbc_connection_string => "jdbc:mysql

    1.5K30

    高效搜索

    ---- layout: default title: 高效搜索 category: [技术, 安全] comments: true --- 背景介绍 之前看到过类似的文章,但是已经忘记出处在哪儿了...文章内容 黑客去入侵一个网站的时候往往需要搜集它的很多信息,这其中包括利用网站漏洞,社工,还有就是用搜索引擎进行搜索,而常被我们利用的搜索网站——谷歌就是一个非常好的信息搜索工具,下面就给大家普及一下谷歌搜索的技巧...相应的还有更小的分类搜索: rphonebook:仅搜索住宅用户电话号码簿; bphonebook:仅搜索商业的电话号码簿。 ? 另外,还有一些不常用的搜索指令。...inurl:admin filetype:txt inurl:admin filetype:db inurl:admin filetype:cfg inurl:mysql filetype:cfg inurl...上面的搜索语法是谷歌搜索的,我们可以用百度搜一下也会有部分信息,有条件的可以直接用谷歌进行搜索。

    1.2K40

    mysql 多表关联查询 实现 全文匹配的 模糊搜索接口 SQLmysql 多表关联查询 实现 全文匹配的 模糊搜索接口 SQL

    mysql 多表关联查询 实现 全文匹配的 模糊搜索接口 SQL SELECT tagDeptUserRel.* FROM tag_dept_user_rel tagDeptUserRel inner...中FIND_IN_SET的使用方法 在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,...这时候mysql的FIND_IN_SET函数就派上用场了,下面来具体了解一下。...字段中包含”5″这个参数的值 SELECT * from test where FIND_IN_SET('5',btype) 返回值为null,因为btype中没有”5”这个值,它不同于 like 模糊查询...SELECT * from test where FIND_IN_SET('20',btype) 当然它的返回值为null,因为字段中没有这个值 FIND_IN_SET和like的区别 like是广泛的模糊匹配

    3.5K20

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

    通过详细的技术架构设计和代码实现,展示了如何构建一个高效、准确的姓名模糊匹配系统,为基拉执行系统的目标识别提供了技术支持。文中融合了2025年最新的模糊匹配技术进展,确保内容的时效性和专业性。...Levenshtein距离算法与模糊搜索技术的应用,为基拉执行系统的目标识别提供了一种解决方案。 近期,模糊匹配技术的发展取得了显著突破。...只有通过高效、准确的姓名模糊匹配,基拉才能在各种复杂情况下正确识别目标,确保正义的贯彻。Levenshtein距离算法与模糊搜索技术的结合,为基拉执行系统的目标识别提供了技术保障。 2....5.3 缓解策略 技术保障: 结合多种模糊匹配算法,提高匹配的准确性 利用深度学习模型,增强对姓名语义的理解 实施多级验证机制,减少误判的可能性 性能优化: 构建高效的索引结构,提高搜索速度...关键词: 死亡笔记,姓名模糊匹配,Levenshtein距离算法,模糊搜索,基拉,目标识别

    61810

    jquery 下拉框搜索模糊查询

    jQuery下拉框搜索模糊查询实现在web开发中,经常会遇到需要在下拉框中进行搜索并进行模糊查询的需求。jQuery是一个广泛应用于前端开发的JavaScript库,可以帮助我们实现这样的功能。...本文将介绍如何使用jQuery实现下拉框搜索模糊查询功能。...>jQuery实现搜索功能接下来,使用jQuery编写代码实现下拉框的搜索功能。我们可以监听输入框的输入事件,然后根据输入的内容来筛选下拉框中的选项,从而实现模糊查询。...下拉框搜索模糊查询功能经常用于选择城市、产品、用户等信息。以下示例针对选择水果的场景进行演示。...以下是关于jQuery的详细介绍:特点和优势简洁高效:jQuery提供了简洁方便的API,帮助开发者用更少的代码完成更多的功能。

    6.6K10

    搜索如何倒排索引?如何模糊匹配?

    那么倒排索引存储的数据将会变成: titletagterm文档idterm文档id这1,2123451是1,2543212一张1 一幅2 很1 相当2 贵1,2 名画1,2 画1,2 二、搜索如何进行模糊匹配...搜索引擎使用倒排索引来进行模糊匹配,以上文为例,输入"很贵的画”搜索时: 首先输入词也进行分词"很/贵/画",然后用得到的term去和索引数据进行比对,得到:"很"->{1},“贵”->{1,2},"...画"->{1,2},然后"很"∩"贵"∩"画"={1},得到文档1为结果,模糊匹配在索引内部都是通过分词后的term精确匹配来计算的 2.1 关于匹配度 es的match查询通常可以带匹配度(默认是75%...),依旧输入"很贵的画",如果匹配度是100%,那么结果就是"很"∩"贵"∩"画"={1},如果匹配度降到75%(搜索词越短,75%的范围越模糊),那么结果(按正常理解)可以是("很"∩"贵)υ("贵"...∩"画")υ("很"∩"画")={1,2} 2.2 关于短的搜索词 上面说到短的搜索词75%的匹配度很模糊,因为貌似es有个匹配度自动降级,短词搜索的时候匹配度会自动降到最低,只要有一个term匹配就可以当作结果

    2.3K40
    领券