MySQL模糊查询性能优化

一、背景

我们经常在数据库中使用 LIKE 操作符来完成对数据的模糊搜索,LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

如果需要查找客户表中所有姓氏是“孙”的数据,可以使用下面的 SQL 语句:

SELECT * FROM Customer WHERE Name LIKE ‘孙%’

如果需要查找客户表中所有手机尾号是“1234”的数据,可以使用下面的 SQL 语句:

SELECT * FROM Customer WHERE Phone LIKE ‘%123456’

如果需要查找客户表中所有名字中包含“秀”的数据,可以使用下面的 SQL 语句:

SELECT * FROM Customer WHERE Name LIKE ‘%秀%’

以上三种分别对应了:左前缀匹配、右后缀匹配和模糊查询,并且对应了不同的查询优化方式。

左前缀匹配查询优化:索引就可以

我们可以采用“以空间换时间”的方式来解决右后缀匹配查询时效率低下的问题。

简单来说,我们可以将字符串倒过来,让右后缀匹配变成左前缀匹配。以“防着古海回来再抓孙悟空”为例,将其倒置之后的字符串是“空悟孙抓再来回海古着防”。当需要查找结尾为“孙悟空”的数据时,去查找以“空悟孙”开头的数据即可。

具体做法是:在该表中增加“txt_back”列,将“txt”列的值倒置后,填入“txt_back”列中,最后为 “txt_back”列增加索引。

二、模糊查询优化

根据用户量和接口qps决定使用哪种优化方式,如果用户量级小,是面向B端的系统,可以采用mysql的feature进行查询优化,如果用户量级大,我们

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对 MySQL模糊查询性能优化,可以考虑以下几个方面: 1. 使用索引:为模糊查询的字段添加索引,可以大大提高查询速度。在模糊查询时,可以使用前缀索引来优化性能。例如,对于一个名为 name 的字段,可以添加一个前缀索引,如 INDEX idx_name (name(10))。 2. 避免在模糊查询中使用通配符开头:通配符开头的模糊查询(如 '%keyword')无法使用索引,会导致全表扫描。尽量避免使用通配符开头,或者考虑使用全文搜索引擎来处理此类需求。 3. 使用全文搜索引擎:MySQL 提供了全文搜索引擎(如 MySQL 的全文索引或第三方搜索引擎,如 Elasticsearch),可以更高效地处理模糊查询。全文搜索引擎可以根据关键词的相关性进行排序,并且支持更复杂的查询操作。 4. 限制查询结果集大小:如果你只需要查询结果中的部分数据,可以通过 LIMIT 关键字限制结果集的大小。这样可以减少查询的数据量,提高查询性能。 5. 数据库优化:定期进行数据库优化操作,包括索引重建、表优化以及统计信息更新等。这些操作可以提高查询性能,并减少模糊查询的执行时间。 6. 数据库分区:如果数据量较大,可以考虑将表进行分区。根据分区规则,可以将数据划分到不同的物理文件中,从而提高查询性能。 7. 使用缓存:对于频繁查询模糊查询结果,可以考虑使用缓存来提高查询速度。将查询结果缓存在内存中,可以避免每次都进行数据库查询。 这些是一些常见的优化方法,具体的优化策略需要根据实际场景和需求来确定。同时,还可以通过分析慢查询日志、性能监控工具等来找到潜在的性能瓶颈,并进行相应的优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值