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

mysql的模糊查询性能

基础概念

MySQL中的模糊查询是指使用LIKE关键字进行字符串匹配的查询。它允许你使用通配符(%_)来匹配任意字符序列。例如:

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

相关优势

  1. 灵活性:模糊查询提供了灵活的方式来匹配包含特定模式的字符串。
  2. 简单易用:使用LIKE关键字和通配符,可以快速构建简单的模糊查询。

类型

  1. 前缀匹配:使用LIKE 'pattern%',匹配以pattern开头的字符串。
  2. 后缀匹配:使用LIKE '%pattern',匹配以pattern结尾的字符串。
  3. 任意位置匹配:使用LIKE '%pattern%',匹配包含pattern的任意位置的字符串。

应用场景

  1. 搜索功能:在用户输入部分关键字时,模糊查询可以用于搜索数据库中的相关记录。
  2. 数据验证:在某些情况下,可能需要验证数据是否符合特定的模式。
  3. 数据清理:在数据导入或迁移过程中,可以使用模糊查询来查找和处理不符合规范的数据。

性能问题及原因

模糊查询的性能问题通常出现在大型数据库中,主要原因包括:

  1. 全表扫描:如果没有合适的索引,MySQL会进行全表扫描,导致查询速度慢。
  2. 索引失效:即使有索引,某些模糊查询模式(如LIKE '%pattern')会导致索引失效。
  3. 数据量大:数据库中的数据量越大,模糊查询的性能问题越明显。

解决方案

  1. 使用全文索引:对于全文搜索,可以使用MySQL的全文索引功能。例如:
  2. 使用全文索引:对于全文搜索,可以使用MySQL的全文索引功能。例如:
  3. 参考链接:MySQL全文索引
  4. 优化查询模式:尽量避免使用LIKE '%pattern',可以考虑使用前缀匹配或后缀匹配。
  5. 使用覆盖索引:确保查询的字段都在索引中,减少回表操作。例如:
  6. 使用覆盖索引:确保查询的字段都在索引中,减少回表操作。例如:
  7. 分页查询:对于大量结果集,可以使用分页查询来减少每次查询的数据量。例如:
  8. 分页查询:对于大量结果集,可以使用分页查询来减少每次查询的数据量。例如:
  9. 缓存结果:对于频繁执行的模糊查询,可以考虑将结果缓存起来,减少数据库的负载。

示例代码

假设有一个用户表users,包含idname字段,以下是一个模糊查询的示例:

代码语言:txt
复制
-- 创建索引
CREATE INDEX idx_name ON users(name);

-- 模糊查询
SELECT * FROM users WHERE name LIKE 'john%';

参考链接

通过以上方法,可以有效提升MySQL模糊查询的性能。

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

相关·内容

MySQL模糊查询性能优化

结论写在最前面 用户基数估计 模糊查找接口qps估计 数据检索量估计 支持分布式搜索 支持短语搜索 支持分词 上述每一项都将是决定我们模糊查询最终实现方案 业务场景分析 根据 模糊查找 业务场景,比对一下上面列出...Staffs表结构&查询接口 将员工数据导入到MySQL之后,共有 59066 条数据,大家重点关注 rtx,pinyin,chn_name 这三个字段,其他都是辅助字段,不参与查询业务。...这就是传说中大炮打蚊子啊! MySQL全文索引 首先检查你用MySQL版本,最好是5.6+。...%查询中文名字段; 关键字查询接口返回结果做Redis缓存,缓存时间为120分钟; 所以我解决方式:使用全文索引优化rtx和拼音模糊查询,中文模糊查询继续使用**LIKE %%**,最后再加一个Redis...Sphinx 如果你和我一样,数据源存放在MySQL,可是使用:Sphinx ; 其实咱们KM早期就是使用Sphinx实现全文检索查询,Sphinx可以非常容易与SQL数据库和脚本语言集成。

32.3K2216

MySql 模糊查询

SELECT 字段 FROM 表 WHERE 某字段 Like 条件 SQL模糊查询,使用like比较关键字,加上SQL里通配符,请参考以下:  1、LIKE'Mc%' 将搜索以字母 Mc 开头所有字符串...4、LIKE'_heryl' 将搜索以字母 heryl 结尾所有六个字母名称(如 Cheryl、Sheryl)。 ...匹配单个任意字符,它常用来限制表达式字符长度语句: 3,[ ] :表示括号内所列字符中一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中任一个。...4,[^ ] :表示不在括号所列之内单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外任一个字符。...5,查询内容包含通配符时 :由于通配符缘故,导致我们查询特殊字符“%”、“_”、“[”语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:

5.2K10
  • MySQL 模糊查询MySQL 数据库 like 语句通配符模糊查询小结

    MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)——MySQL 数据库 like 语句通配符模糊查询小结...文章目录 MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)——MySQL 数据库 like 语句通配符模糊查询小结...前言 一、分析 SQL 语句 1.1、普通 SQL 语句查询分析 1.2、普通 SQL 查询语句如何处理 1.3、使用 like 通配符模糊查询语句分析 二、like 语句使用通配符模糊查询剖析 2.1...、like 语句应用场景 2.2、模糊查询剖析 2.3、正确语句 三、MyBatis like 模糊查询及关键字区分 总结 ---- 前言 今天在使用 MySQL 语句执行增删改查操作时,控制台报出了以下错误...处理。 二、like 语句使用通配符模糊查询剖析 2.1、like 语句应用场景 使用 like 通配符进行模糊查询是我们在项目中常遇到,比如在搜索框中对于数据模糊查询

    14.8K40

    mysql模糊查询方法

    Mysql模糊查询正常情况下在数据量小时候,速度还是可以,但是不容易看出查询效率,在数据量达到百万级,千万级甚至亿级时 mysql查询效率是很关键,也是很重要。...一、一般情况下 like 模糊查询写法:前后模糊匹配 这个SQL语句,如果用explain解释的话,我们很容易就能发觉它是没有走索引搜索,而是对全表进行了扫描,这显然是很慢,还有卡库可能。...如果将上面的SQL语句改成下面的写法: 就是把‘keyword’前面的%去掉了,这样写法用explain解释看到,SQL语句使用了索引,这样就可以大大提高查询效率。...有时候,我们在做模糊查询时候,并非要想查询关键词都在开头,所以如果不是特别的要求,”keywork%”并不合适所有的模糊查询。...二、模糊查询高效方法: 1、LOCATE(’substr’,str,pos)方法 解释:返回 substr 在 str 中第一次出现位置,如果 substr 在 str 中不存在,返回值为 0 。

    2.8K50

    Mysql 模糊查询 like 语句

    mysql模糊查询like语句 like语句用于模糊查询符合条件语句 %代表 若干个字符 _代表一个单词 查询使用like语句语法是: select 字段名 from 表名 where 字段名...like '需要模糊查询对象' 如果需要查询第二位字母是q字段,那么like后面可以跟'_q%' 如果需要模糊查询字符当中有'_',那么可以使用转义字符。...如果需要查询第二位字符是_字段,那么like后面可以跟 '__%' 例如,我们现在有如下一张表 +-------+--------+----------+------+------------+-...'M' 的人姓名时候,我们可以使用以下语句进行查询。...select ename from emp where ename like '_m%'; 使用上述语句查询结果为 +-------+ | ename | +-------+ | SMITH | +-

    5.2K30

    如何加快MySQL模糊匹配查询

    有时我会看到条件如下模式匹配查询:“其中字段名像'%something%'”。 MySQL不能为这些查询使用到索引,这意味着它必须每次都进行一次全表扫描。...正如我所说,更多部分意味着更多行。 我希望有更大改进,所以我想知道我们还能做些什么。 由于前导%,MySQL不能使用索引。 我们如何避免这种情况?...需要三个触发器(插入,更新和删除,这可能会影响表上写入性能),或者应用程序必须使该表保持最新状态。 优点 找到一个email地址将会更快,并需要更少读取。 用户会更满意。...结论 如果MySQL中没有内置解决方案或索引可以帮助或解决您问题,请不要放弃。很多时候,只需稍作修改,您就可以创建自己索引表或使用其他技巧。...在这种特殊情况下,如果您愿意牺牲一些额外磁盘空间,您可以使用正确方法加快查询速度。 Trigram并不是最好选择,但我可以看到可能更好用例。

    3.7K50

    Mysql全文索引实现模糊查询

    导语 基本上所有的产品都离不开模糊搜索,无论是C端社交产品、或者B端一些SaaS服务。...众所周知问题是,LIKE命令在数据量大时候性能特别低,甚至大数据量下一个LIKE查询可以拖垮整个DB,这是因为LIKE语句是不能利用索引。...这儿要说是另一个场景,因为考虑生产DB稳定性,运维关闭了数据库LIKE功能,但同时我们有个搜索需求,这个搜索数据量特别低时候,比如模糊搜索商品类别(几千/几万个)这种需求。...如果也借用ES这一套来做当然是可以,但是从开发时间和精力角度,显然有点得不偿失,那么在这种场景下,我们如何实现模糊搜索。...ngram_token_size设置查询单词最小字数,也就是如果在默认值是2情况下,搜索单字是得不到任何结果。譬如上单独搜索'今','天','真','好'这四个字都是拿不到结果

    13.3K41

    MySql查询性能优化

    将一个大删除操作分解成多个较小删除操作可以将服务器上原本一次性压力分散到多次操作上,尽可能小地影响MySql性能,减少删除时锁等待时间。同时也减少了MySql主从复制延迟。...可以减少锁竞争 更容易对数据库进行拆分,更容易做到高性能和可扩展。 查询本身效率也有可能会有所提升。例如上面用IN()代替关联查询比随机关联更加高效。...如果数据量太大超过“排序缓冲区”大小,那么MySql只能采用文件排序,而文件排序算法非常复杂,会消耗很多资源。 无论如何排序都是一个成本很高操作,所以从性能角度考虑,应尽可能避免排序。...DESC LIMIT 20; 该技术好处是无论翻页到多么后面,其性能都会很好。...此外,也可以用关联到一个冗余表方式提高LIMIT性能,冗余表只包含主键列和需要做排序数据列。 优化UNION查询 除非确实需要服务器消除重复行,否则一定要使用UNION ALL。

    2K40

    mysql查询性能优化

    mysql查询过程: 客户端发送查询请求。 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行。 服务器进行sql解析,预处理,再由优化器生成执行计划。...Mysql调用存储引擎API执行优化器生成执行计划进行查询。 返回结果。 ?...分解单个查询可以减少锁竞争。 应用层进行关联,使得数据库拆分更加容易,构建高性能及高扩展性程序、服务。 查询效率提升。 减少冗余记录查询。...确保任何GROUP BY和ORDER BY中表达式只涉及到一个表中列,这样Mysql才能使用索引来优化过程。 升级Mysql需要检查优化。 5.6之前尽可能使用关联查询代替子查询。...UNION查询Mysql通过创建填充临时表方式来执行。

    1.6K20

    mysql多字段关键词模糊查询

    1,输入单个关键字“001”可查出四条数据,可实现sql语句是: SELECT * FROM tbl_app_clinic_item WHERE CONCAT(applicationCode, clinicItemDictCode...) LIKE '%001%' 2,输入两个关键字“001,003”可查出2数据,可实现sql语句是: SELECT * FROM tbl_app_clinic_item WHERE CONCAT(applicationCode...,但这样有一个问题:如果你输入单个关键字“001003”也会查到数据,这并不是我们需要结果, 解决方法是:由于使用逗号分隔多个关键字,说明逗号永远不会成为关键字一部分,所以我们在连接字符串时把每个字段以逗号分隔即可解决此问题...,下面这个sql语句不会查询到数据: SELECT * FROM tbl_app_clinic_item WHERE CONCAT(applicationCode, ',', clinicItemDictCode...这样有个问题,如果这两个字段中有值为NULL,则返回也是NULL,即将表格中数据appl那么这一条记录可能就会被错过,对此,我们可以使用IFNULL函数。

    4K10

    Mysql常用sql语句(9)- like 模糊查询

    测试必备Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 like应该是最常用查询条件了 必须滴掌握!...% 通配符查询栗子 应该是最常用通配符了,它代表任意长度字符串,包括0 % 比如: 表示以字母 a 开头,以字母 b 结尾任意长度字符串;该字符串可以代表 ab、acb、accb、accrb...等字符串 a%b 查询username字段包含test记录 select * from yyTest where username like "%test%"; ?...知识点 匹配字符串必须加单引号或双引号 like "%test%" _ 通配符查询栗子 只能代表单个字符,字符长度不能等于0,即字符长度必须等于1;相对于 % 来说, _ 肯定没这么常用 _...注意头部、尾部多余空格: 是不会匹配到“test1” " test% " 注意NULL:通配符是不能匹配到字段为NULL记录 不要过度使用通配符:因为Mysql对通配符处理速度会比其他操作花费更长时间

    2.8K20

    mysql模糊查询(详细解析与例句)-建议收藏

    模糊查询语句格式 SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件; 模糊查符号 模糊查询是针对字符串操作,类似正则表达式,没有正则表达式强大 通配符: 【_】占位符,仅代表占用一个字符...] WHERE u_name LIKE '老[^1-4]'; 将排除“老1”到“老4”,寻找“老5”、“老6”、 5,查询内容包含通配符时 由于通配符缘故,导致我们查询特殊字符“%”、“_”、“...[”语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。...,"[[]") '此句一定要在最前 str=replace(str,"_","[_]") str=replace(str,"%","[%]") sqlencode=str end function 在查询前将待查字符串先经该函数处理即可...,并且在网页上连接数据库用到这类查询语句时侯要注意: 如Select * FROM user Where name LIKE '老[^1-4]';上面 【'】老[^1-4]【'】是要有单引号,别忘了

    83720

    java redis模糊查询_Redis模糊查询「建议收藏」

    大家好,又见面了,我是你们朋友全栈君。 最近使用Redis优化项目功能,其中有一部分为模糊查询,找了很多帖子,也没有找到很好解决方案和思路,最终皇天不负有心人啊,终于让我找到了!!!...可以通过Redis中keys命令进行获取key值,具体命令格式:keys pattern 文中提到redis中允许模糊查询有3个通配符,分别是:*,?,[] 其中: *:通配任意多个字符 ?...spring集成redisRedisTemplate进行操作,这样在注入模板时可能会出现模糊查询不好用情况,是因为 keys方法是存在于StringRedisTemplate子类中(父类-RedisTemplate...) 在spring配置时,一定要注意!!!...将要查询条件当做key进行ZSet存储 2.

    7.1K20
    领券