php - Laravel DB get() 很慢

标签 php mysql laravel

所以我尝试获取大约 5k 条记录,你编写了以下代码:

            $mainData = DB::table('table')
            ->where('id', $id)
            ->where('status', '>', 0)
            ->where('amount', '>', 0)
            ->orderBy('timestamp', 'DESC')
            ->where('status', '>=', DB::raw('UNIX_TIMESTAMP((LAST_DAY(DATE_SUB(NOW(), INTERVAL ' . intval($month) . ' MONTH))+INTERVAL 1 DAY)-INTERVAL 1 MONTH)'))
            ->where('status', '<', DB::raw('UNIX_TIMESTAMP(LAST_DAY(DATE_SUB(NOW(), INTERVAL ' . intval($month) . ' MONTH))+INTERVAL 1 DAY)'))
            ->get();

当我创建 ->toSql() 时,我得到了这个查询:

    select * from `table` where `id` = 3 and `status` > 0 and `amount` > 0 and `status` >= UNIX_TIMESTAMP((LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH))+INTERVAL 1 DAY)-INTERVAL 1 MONTH) and `status` < UNIX_TIMESTAMP(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH))+INTERVAL 1 DAY) order by `timestamp` desc

当我在 phpmyadmin 中执行此查询时: 显示第 0 - 24 行(总共 5980 行,查询花费了 0.0513 秒。)但是当我在 laravel 中运行此查询时,它花费了大约 6 秒(仅 6k 记录)我认为问题可能是 laravel 每条记录创建新对象是任何有什么办法可以加快速度?

最佳答案

您可以尝试通过将更多代码重写为原始查询或将整个查询重写为原始 SQL 来优化代码。正如您所提到的,Laravel 必须创建数千个对象,这确实减慢了您所经历的过程。

看看Raw Expressions在 Laravel 文档上阅读有关此内容的更多信息。

文档中的基本示例:

$users = DB::table('users')
                     ->select(DB::raw('count(*) as user_count, status'))
                     ->where('status', '<>', 1)
                     ->groupBy('status')
                     ->get();

也许还可以通过向 ->get() 提供字段数组来减少返回的数据量。 。您可以在 Laravel Eloquent Builder API Documentation 上查看执行此操作的 API。 .

关于php - Laravel DB get() 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46309996/

相关文章:

php - Livewire-Laravel-Alpine : Emit event on validation errors including all errors on errorbag

php - Laravel - 登录 Controller |如何带参数设置$redirectTo路由?

php - 从 PHP 7.0 切换到 7.2 后未定义的常量

php - 快速结帐的基本 Paypal 沙箱授权和捕获逻辑

mysql - 从mysql查询中的字符串中提取字符串

mysql - 使用 vb.net GUI GridDataView 同步 Mysql 数据库

mysql - Live Server 响应 mysql 不支持 ExtractValue 函数

php - 一般错误 : 1 no such table: users in Laravel Unit Test

php - php中的URL混淆器

php - 使用 mysql 和 session 变量进行多个 Ajax 调用