【问题标题】:Laravel paginate is so slowLaravel 分页太慢了
【发布时间】:2019-07-02 20:30:54
【问题描述】:

我的分页有问题,在超过 25K 行的大数据中速度太慢了 我尝试使用以下方法获取用户在数据库中保存的产品:

$products = Item::has('product_save');

我添加相同的条件...

$products = $products->where('active', 0);

我用这一行来分页:

$products = $products->paginate(20);

所有查询耗时 0.06865 秒。 但是超过4.9秒太慢了! 我怎样才能让它非常快?

【问题讨论】:

  • 只选择重要字段而不是全部,可能会加快您的查询执行时间
  • 您能检查生成的查询并在此处发布吗?这样更容易分析问题。
  • @SaurabhMistry 我没有很多字段,只有 16 个,我在没有关系的情况下使用它是如此之快
  • @Jerodev 如何从雄辩的 laravel 中获得它?
  • 问题只是分页

标签: laravel laravel-5 eloquent laravel-5.2 laravel-5.1


【解决方案1】:

您在 cmets 中询问“我如何才能做到这一点 SELECT p.* FROM products as p,product_saves as s where s.user_id=4 and p.id = s.product_id”。答案贴在下面:

Item::with('product_saves')->whereHas('product_saves', function($q){ 
    $q->where('user_id', 4)
});

and p.id = s.product_id 应该定义为关系 product_saves,如果不是,您应该为此创建自定义关系。这将急切加载查询并将您的项目限制为仅具有 product_saves 关系的项目,并确保 product_saves 关系的 user_id 为 4。

【讨论】:

  • 谢谢,但是当我使用分页时,第一次查询在 0.0012199878692627 S 中运行时非常慢,分页为 5.9855120182037 S
  • 总执行时间:0.001230001449585 总执行时间:2.4422662258148
  • 这太疯狂了。分页不应该让查询减慢那么多。您是否尝试过使用 skip() 和 take() 来模拟分页,看看是否有帮助?
猜你喜欢
  • 2019-10-20
  • 2016-01-26
  • 1970-01-01
  • 2017-02-07
  • 2013-03-10
  • 2014-06-07
  • 2016-05-31
  • 2011-07-07
  • 2015-08-23
相关资源
最近更新 更多