首页
学习
活动
专区
工具
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.5K2216

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

    2.8K50

    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.9K40

    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.4K41

    MySql查询性能优化

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

    2.1K40

    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函数。

    4.1K10

    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]【'】是要有单引号的,别忘了

    87020

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

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

    7.2K20
    领券