gpt4 book ai didi

php - 我怎样才能使涉及大约 300,000 行的更新语句更快?

转载 作者:行者123 更新时间:2023-11-29 03:16:27 25 4
gpt4 key购买 nike

我有一个 Laravel 应用程序,它有一个常见的操作,用户从一个名为 Sign 的数据库表中获取大约 300,000 行,其中包含 3 列。表列说明如下:id(int-10), sign(varchar-16), status(int-10)

该表有大约 3 亿个条目。当用户获取一些条目时,这些行的状态列将更改为用户的 ID。请注意,用户每次总是输入大约 300,000 个条目。

我已将 innodb_buffer_pool_size 和 innodb_log_file_size 分别增加到 2GB 和 1GB。系统有 3.75GB 的 RAM。

这是代码-

$collection = Sign::select('sign')
->where('status', 0)
->where(DB::raw('CHAR_LENGTH(sign)'), '=', 7)
->take(300000);

//write the the signs in $collection in a file here

$collection->update(['status' => $user->id]);

在我的案例中,表格数据可以在不到 1 秒的时间内轻松获取。更新语句以前需要大约 100-200 秒,但最近我将我的操作系统从 Ubuntu 14 升级到 16,在此更新语句之后大约需要 500-600 秒。有什么办法可以使这个过程更快?我应该增加 RAM 吗?

最佳答案

您不必像在 laravel eloquent 中那样直接点击更新查询,而不是选择和更新,

$collection = Sign::where('status', 0)
->whereRaw('CHAR_LENGTH(sign) = 7')
->update(['status' => $user->id]);

在任何数据库中,选择操作总是很快的,因为它只涉及表的扫描,你可能会得到更多的细节,例如EXPLAIN SELECT * FROM sign;

关于php - 我怎样才能使涉及大约 300,000 行的更新语句更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55487123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com