MySQL 模糊匹配优化

经典语句

SELECT `column` FROM `table` WHERE `field` like '%keyword%';

看到上述这条语句是不是有一丝丝的熟悉,没错,开始都是这么写的 - -。
explain 查看性能

idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEbjindexdrugName_index3022581211.11Using where; Using index

下面介绍一下locate:

返回 substr 在 str 中第一次出现的位置,如果 substr 在 str 中不存在,返回值为 0

SELECT 'column' FROM 'table' as t WHERE LOCATE(keyword',t.field)>0;

explain 查看性能

idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEbjindexdrugName_index30225812100Using where; Using index

上述对比我们可以看到,其实仅有filtered的差别,
filter的解释是这样子的:这个字段表示存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例,注意是百分比,不是具体记录数。
那当然是返回的百分比越大越好,代表数据利用率高。

还有一种like查询方式‘keword%’,限制则是必须以keyword开头

SELECT `column` FROM `table` WHERE `field` like 'keyword%';

explain 查看性能

idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEbjrangedrugName_indexdrugName_index30260100Using where; Using index

我们不难发现他的查询性能是优于上述两种方式的,如果符合keyword开头的情况下则可以采用。

转载于:https://www.cnblogs.com/zenan/p/10895144.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值