首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 高效模糊搜索

基础概念

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

相关优势

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

类型

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

应用场景

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

遇到的问题及解决方法

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

原因

  • 模糊搜索通常会导致全表扫描,尤其是在没有适当索引的情况下。
  • 使用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内置函数实现。

3.2K20

前端-模糊搜索

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

1.3K10
  • 整合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.1K31

    整合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.2K30

    高效搜索

    ---- 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...上面的搜索语法是谷歌搜索的,我们可以用百度搜一下也会有部分信息,有条件的可以直接用谷歌进行搜索

    75840

    利用python对mysql表做全局模糊搜索并分页实例

    在写django项目的时候,有的数据没有使用模型管理(数据表是动态添加的),所以要直接使用mysql。前端请求数据的时候可能会指定这几个参数:要请求的页号,页大小,以及检索条件。...searchInfo: 需要全局查询的信息 """ def getMysqlData(tableName, pageNum, pageSize, searchInfo): # 使用MySQLdb获取的mysql...,{'字段名1': 数据2, '字段名2': 数据2, ...}, ...] """ 补充知识:django 分页查询搜索–传递查询参数,翻页时带上查询参数 django在分页查询的时候,翻页时,v层要传递查询参数...nofollow" next</a {% endif %} </span </div {% include 'include/pager.html' %} 以上这篇利用python对mysql...表做全局模糊搜索并分页实例就是小编分享给大家的全部内容了,希望能给大家一个参考。

    1.6K20

    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是广泛的模糊匹配

    2.4K20

    jquery 下拉框搜索模糊查询

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

    36510

    Github高效搜索方式

    Github高效搜索方式 0、写在前面 1、常用的搜索功能 1.1 直接搜索 1.2 寻找指定用户|大小的仓库 1.3 搜索仓库 1.4 查找特定star范围的仓库 1.5 查找指定主题 1.6 查找仓库语言...1.7 搜索issue和pull请求 2、 傻瓜式搜索 3、参考 ---- ---- 0、写在前面 名词解释 watch:持续接收该仓库的动态更新 fork:复制项目到自己的 Github 仓库中...GitHub官网,直接在搜索搜索你想要搜索的内容即可,如下图所示; 比如搜索Hadoop,查询结果如下 此种方式,简单粗暴,易得结果,但并不是那么准确高效;我们可以考虑采用类似Linux grep...1.2 寻找指定用户|大小的仓库 user:shadowlim size:>=5000 1.3 搜索仓库 根据版本库名称、描述或 README 文件的内容来搜索 使用 in 修饰语,你可以将搜索限制在版本库名称...如果省略这个限定词,只有版本库名称、描述和主题被搜索到。

    48940

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

    那么倒排索引存储的数据将会变成: 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匹配就可以当作结果

    1.5K40
    领券