MySQL whereIn 有最大限制吗?
首先我们先复盘一下出现的场景:
首先我有一张优惠券表 coupon
和一张核销表 write_off_record
,在列表查询的时候是使用了分页,所有在运行的使用是没问题的,但是这里有个下载功能(目前22w多),这里就会报错内存溢出
使用场景:
coupon 表
public function reocrd()
{
return $this->hasMany(WriteOffRecord::class);
}
write_off_record 表
public function coupon()
{
return $this->belongsTo(Coupon::class);
}
下载
Coupon::with('reocrd')->get();
注意这里使用了模型关联一对多 with(‘reocrd’),这里就会有 坑 坑 坑, 重要的事情说三遍!
1、whereIn是否有个数限制?
mysql:in是没有限制的,但是受 max_allowed_packet 默认是4MB,大约2000个之内没问题
oracle:最多是1000个
2、如何查看 sql 语句最大限制
mysql --help | grep max-allowed-packet
解决方法:
使用 join
代替 wherein
如果有好的解决办法请赐教!
原文地址:mysql whereIn有最大限制吗?
本作品采用《CC 协议》,转载必须注明作者和本文链接
需求是一次性全部下载完?分批下载怎么样,根据时间、用户等条件来筛选。
PDO绑定数量,是有限制的