sql的join中使用函数导致查询变慢的坑

一、问题

由于历史原因,数据库有几个表设计的不是很好。

最近有个需求,需要联查这几个表,必须要用到一个sql:

 SELECT * FROM mytable1 A  
  left join mytable2 i 
  on SUBSTRING(A.student_id,2,8) = i.user_id and SUBSTRING(A.student_id,1,1) = i.class_id

大概就是这个意思,i.class_id与i.user_id拼起来,才是A.student_id;
如果想联查,只能这样写。

但是,这个查询很慢,慢到影响用户体验。

二、解决方法

因为这句sql太慢了,所以最后还是决定修改表结构。

就是给mytable1扩2个列,增加user_id列与class_id列,把值赋好,加好索引,然后把sql改成这样:

 SELECT * FROM mytable1 A  
		left join mytable2 i 
		on A.user_id = i.user_id and A.class_id = i.class_id

三、总结

sql中联查其它表时,不要用多余的函数,会导致查询变的非常慢;

如果实在要用函数,就修改表结构,加索引,然后不用这个函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐梦想永不停

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值