MySQL 中 FIND_IN_SET 函数执行非常慢的某种写法

MySQL版本:5.7.19

1、需求场景

a) 表说明:商品分类关系表[t_class_product],[classId]  分类主键,fn_class_childs(1) 返回所有子分类主键字符串;

b) 功能说明: 依据 分类主键 查询该分类下的所有商品

2、问题定位

a) 之前操作:新上传几千个商品,然后就发现查询数据非常慢,长达10多秒;

b) 开始以为 [fn_class_childs()] 函数执行慢,结果执行非常快;

c) 然后怀疑是不是 [FIND_IN_SET] 函数 查询数据多就非常慢,

     然后查找函数的效率问题,但发现至少查询几十,上百万数据才有影响,而且也不会需要10几秒的时间;


d) 结果分开查询都很快,  合起来就慢的很,使用 explain 分析也没发现什么问题,最后怀疑可能每次比较都可能调用函数[fn_class_childs()]


3、解决方式

a) 既然找到可能的问题,就自然想到缓存查询函数结果,但又不想改的太复杂;


             b) 使用 explain 可以发现 使用了临时表存储结果,查询速度恢复以前的十几毫秒;

  • 24
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 31
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值