【问题标题】:Laravel, query to show big data is slowLaravel,显示大数据的查询很慢
【发布时间】:2021-04-01 17:29:11
【问题描述】:

我有一个页面供用户搜索特定日期范围内的数据,它会在数据表中显示结果,例如(IDAudit typeusernew valueold value 等),它来自2表关系。

这是我的查询:

$audits = \OwenIt\Auditing\Models\Audit::with('user')
    ->orderBy('updated_at', 'DESC')
    ->where('created_at', '>=', $date1)
    ->where('created_at', '<=', $date2)
    ->get;

问题是如果数据量很大,这个过程就会很慢。如何优化查询?

我尝试使用paginate(10)take(10),但它只显示10 个数据而不是所有数据。

【问题讨论】:

    标签: sql laravel performance datatable


    【解决方案1】:

    要提高数据库级别的性能,请在出现在 where 约束中的列上创建索引。

    所以在created_at 列上创建一个索引。

    还要比较日期,为什么不使用whereDate 而不是比较日期的字符串文字

    $audits = \OwenIt\Auditing\Models\Audit::with('user')
        ->orderBy('updated_at', 'DESC')
        ->whereDate('created_at','>=',$date1)
        ->whereDate('created_at','<=',$date2)
        ->paginate(25);
    
    

    一旦查询获得分页记录,视图就可以为访问者/用户提供分页链接以循环访问分页结果集

    {{ $audit->links() }}
    

    links() 将在视图上插入分页链接按钮,用户/访问者可以单击这些按钮来随机浏览结果集。

    Laravel 文档:https://laravel.com/docs/8.x/pagination#displaying-pagination-results

    对于数据库表中的大型数据集/记录,查询分页结果集总是明智的 - 以减少内存使用。

    【讨论】:

      猜你喜欢
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      相关资源
      最近更新 更多