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