Laravel 的模型关联功能提供了功能强大的数据库操作封装,其中 whereHas 方法可以简洁明了将「where」条件放到 has 查询上。这些方法允许你向关联加入自定义约束。

但是在 whereHas 方法会全表扫描做表, 在生成 SQL 的时候会使用 select * from A where exists ( select * from B where … ) 。当我们的左表远远大于右表时,A 表就成了性能瓶颈。导致查询非常缓慢。

解决办法:

1.whereHas性能调优——采用 where in 语法实现优化 查询关联

2.[扩展包] Laravel-wherehasin 提升 ORM 关联关系查询性能 (优化 whereHas 性能)

3.手写sql,避免使用 where exists,而是使用 where in