{"id":500960,"date":"2026-10-30T06:00:07","date_gmt":"2026-10-30T03:00:07","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=500960"},"modified":"2026-10-30T06:00:07","modified_gmt":"2026-10-30T03:00:07","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=500960","title":{"rendered":"chunk(), lazy() \u0438 cursor() \u0432 Laravel: \u0437\u0430\u043c\u0435\u0440\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 chunk() \u0442\u0435\u0440\u044f\u0435\u0442 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432 Laravel \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442 \u00ab\u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c <code>all()<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>chunk()<\/code>\u00bb. \u0421\u043e\u0432\u0435\u0442 \u0432\u0435\u0440\u043d\u044b\u0439, \u043d\u043e \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u0439: \u0443 <code>chunk()<\/code> \u0435\u0441\u0442\u044c \u043b\u043e\u0432\u0443\u0448\u043a\u0430, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0438\u0445\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a, \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439. \u041d\u0438\u0436\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u043f\u044f\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043e\u0431\u0445\u043e\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430 100 000 \u0441\u0442\u0440\u043e\u043a, \u0440\u0430\u0437\u0431\u043e\u0440 \u0442\u043e\u0433\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043f\u043e\u0442\u0435\u0440\u044f \u0441\u0442\u0440\u043e\u043a, \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<h3>\u0421\u0442\u0435\u043d\u0434<\/h3>\n<ul>\n<li>\n<p>Laravel 13.39.0, PHP 8.4.27 (CLI), SQLite 3.46.1, \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0442\u0430\u0431\u043b\u0438\u0446\u0430 <code>orders<\/code>: <code>id<\/code>, <code>status<\/code> (<code>string<\/code>), <code>payload<\/code> (<code>text<\/code>, 200 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432), <code>amount<\/code> (<code>integer<\/code>), 100 000 \u0441\u0442\u0440\u043e\u043a;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c PHP; \u043f\u0430\u043c\u044f\u0442\u044c \u2014 <code>memory_get_peak_usage()<\/code> \u043c\u0438\u043d\u0443\u0441 <code>memory_get_usage()<\/code> \u043f\u0435\u0440\u0435\u0434 \u043e\u0431\u0445\u043e\u0434\u043e\u043c (\u043f\u043e\u0441\u043b\u0435 <code>memory_reset_peak_usage()<\/code>);<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>DB::listen()<\/code>; \u0432 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0432\u0445\u043e\u0434\u0438\u0442 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 <code>count()<\/code> \u0432 \u043a\u043e\u043d\u0446\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0440\u0435\u043c\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u0421\u0423\u0411\u0414, \u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435. \u0427\u0438\u0441\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0447\u0438\u0441\u043b\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043e\u0442 \u0436\u0435\u043b\u0435\u0437\u0430 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442. \u0421\u043a\u0440\u0438\u043f\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h3>\u0427\u0442\u0435\u043d\u0438\u0435: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0442\u043e\u0438\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431<\/h3>\n<p>\u041c\u043e\u0434\u0435\u043b\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f:<\/p>\n<pre><code class=\"php\">use Illuminate\\Database\\Eloquent\\Model;class Order extends Model{    protected $guarded = [];    public $timestamps = false;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u044f\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043e\u0431\u0445\u043e\u0434\u0430 \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"php\">\/\/ 1. \u0412\u0441\u0451 \u0432 \u043e\u0434\u043d\u0443 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044eforeach (Order::all() as $order) { \/* ... *\/ }\/\/ 2. \u041f\u0430\u0447\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 LIMIT\/OFFSETOrder::query()-&gt;orderBy('id')-&gt;chunk(1000, function ($orders) { \/* ... *\/ });\/\/ 3. \u041f\u0430\u0447\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 WHERE id &gt; \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439_idOrder::query()-&gt;chunkById(1000, function ($orders) { \/* ... *\/ });\/\/ 4. LazyCollection \u043f\u043e\u0432\u0435\u0440\u0445 \u043f\u0430\u0447\u0435\u043a (lazy \u2014 OFFSET, lazyById \u2014 \u043f\u043e \u043a\u043b\u044e\u0447\u0443)foreach (Order::query()-&gt;lazy(1000) as $order) { \/* ... *\/ }foreach (Order::query()-&gt;lazyById(1000) as $order) { \/* ... *\/ }\/\/ 5. \u041e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441, \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043e\u0434\u043d\u043e\u0439foreach (Order::query()-&gt;cursor() as $order) { \/* ... *\/ }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u043e\u0434<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0442\u0440\u043e\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0438\u043a \u043f\u0430\u043c\u044f\u0442\u0438<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>all()<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">100 000<\/p>\n<\/td>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,52 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">+136,0 \u041c\u0411<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>chunk(1000)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">100 000<\/p>\n<\/td>\n<td>\n<p align=\"left\">102<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,99 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">+2,4 \u041c\u0411<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>chunkById(1000)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">100 000<\/p>\n<\/td>\n<td>\n<p align=\"left\">102<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,76 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">+2,4 \u041c\u0411<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>lazy(1000)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">100 000<\/p>\n<\/td>\n<td>\n<p align=\"left\">102<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,98 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">+2,4 \u041c\u0411<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>lazyById(1000)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">100 000<\/p>\n<\/td>\n<td>\n<p align=\"left\">102<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,78 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">+2,4 \u041c\u0411<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>cursor()<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">100 000<\/p>\n<\/td>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,89 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">+1,1 \u041c\u0411<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0427\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442:<\/p>\n<ol>\n<li>\n<p><code>all()<\/code> \u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0441\u0435 100 000 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0441\u0440\u0430\u0437\u0443: 136 \u041c\u0411 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0433\u0434\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043a\u043e\u043b\u043e 20 \u041c\u0411. \u041a\u0430\u0436\u0434\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c Eloquent \u0445\u0440\u0430\u043d\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u044b <code>attributes<\/code> \u0438 <code>original<\/code>, \u043f\u043b\u044e\u0441 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u041f\u0440\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c <code>memory_limit = 128M<\/code> \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u043f\u0430\u043b \u0431\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u043a\u0435\u0442\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0435\u043b\u0430\u044e\u0442 101 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0443: 100 \u043f\u043e\u043b\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043f\u0443\u0441\u0442\u0443\u044e, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c. \u041f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u0440\u0430\u0441\u0442\u0451\u0442 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043f\u0430\u0447\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u00ab\u043f\u043e \u043a\u043b\u044e\u0447\u0443\u00bb \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0442\u0435\u043d\u0434\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0441 <code>OFFSET<\/code>. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <code>OFFSET 99000<\/code> \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0421\u0423\u0411\u0414 \u043f\u0440\u043e\u0439\u0442\u0438 \u0438 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u044c 99 000 \u0441\u0442\u0440\u043e\u043a, \u0430 <code>WHERE id &gt; ?<\/code> \u0441\u0440\u0430\u0437\u0443 \u0438\u0434\u0451\u0442 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430. \u041d\u0430 100 000 \u0441\u0442\u0440\u043e\u043a \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u2014 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432, \u043d\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u0445 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u043f\u043e\u0437\u0434\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 <code>OFFSET<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p><code>cursor()<\/code> \u2014 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u0441\u0430\u043c\u0430\u044f \u043d\u0438\u0437\u043a\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0432 PHP, \u043d\u043e \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0438\u0436\u0435.<\/p>\n<\/li>\n<\/ol>\n<h3>\u041b\u043e\u0432\u0443\u0448\u043a\u0430: chunk() \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438<\/h3>\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0437\u0430\u043a\u0430\u0437\u044b \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 <code>new<\/code> \u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432 <code>done<\/code>.<\/p>\n<pre><code class=\"php\">Order::where('status', 'new')    -&gt;orderBy('id')    -&gt;chunk(1000, function ($orders) {        foreach ($orders as $order) {            $order-&gt;update(['status' =&gt; 'done']);        }    });<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438 \u043f\u0430\u0434\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u0441\u0442\u0435\u043d\u0434\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u043e\u0434<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c <code>new<\/code><\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>chunk(1000)<\/code> + <code>update()<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">50 000<\/p>\n<\/td>\n<td>\n<p align=\"left\">50 000<\/p>\n<\/td>\n<td>\n<p align=\"left\">50 052<\/p>\n<\/td>\n<td>\n<p align=\"left\">27,36 \u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>chunkById(1000)<\/code> + <code>update()<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">100 000<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">100 102<\/p>\n<\/td>\n<td>\n<p align=\"left\">51,54 \u0441<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><code>chunk()<\/code> \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0440\u043e\u0432\u043d\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a. \u041c\u0435\u0445\u0430\u043d\u0438\u043a\u0430 \u0442\u0430\u043a\u0430\u044f. <code>chunk()<\/code> \u0441\u0442\u0440\u043e\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"sql\">select * from orders where status = 'new' order by id limit 1000 offset 0select * from orders where status = 'new' order by id limit 1000 offset 1000select * from orders where status = 'new' order by id limit 1000 offset 2000...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0430\u0447\u043a\u0438 1000 \u0441\u0442\u0440\u043e\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e\u0442 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044e <code>status = 'new'<\/code>. \u0412\u044b\u0431\u043e\u0440\u043a\u0430 \u00ab\u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f\u00bb \u043d\u0430 1000 \u0441\u0442\u0440\u043e\u043a \u0432\u043f\u0435\u0440\u0451\u0434, \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 <code>offset 1000<\/code> \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u044b\u0441\u044f\u0447\u0443 \u0435\u0449\u0451 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435: \u043e\u0434\u043d\u0430 \u043f\u0430\u0447\u043a\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e 50 \u0438\u0437 100 \u043f\u0430\u0447\u0435\u043a.<\/p>\n<p><code>chunkById()<\/code> \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0443\u0432\u0438\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430:<\/p>\n<pre><code class=\"sql\">select * from orders where status = 'new' order by id limit 1000select * from orders where status = 'new' and id &gt; 1000 order by id limit 1000select * from orders where status = 'new' and id &gt; 2000 order by id limit 1000<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u0445\u043e\u0434\u044f\u0442 \u0438\u0437 \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u043d\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e <code>id<\/code>, \u0430 \u043d\u0435 \u043a \u043d\u043e\u043c\u0435\u0440\u0443 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Laravel \u043f\u0440\u044f\u043c\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 <code>chunkById()<\/code> \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043b\u0431\u044d\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u0434\u0451\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f. \u0422\u0430 \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0430 <code>lazy()<\/code> \u043f\u0440\u043e\u0442\u0438\u0432 <code>lazyById()<\/code>: <code>lazy()<\/code> \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>OFFSET<\/code> \u0438 \u0442\u0435\u0440\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438.<\/p>\n<p>\u041b\u043e\u0432\u0443\u0448\u043a\u0443 \u0442\u0440\u0443\u0434\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u00ab\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u00bb;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 (\u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u0447\u043a\u0438) \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0432\u0435\u0434\u044c \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0435\u0442;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0445 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f (50 %, \u043f\u043e\u0442\u043e\u043c 25 % \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435), \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u00ab\u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u00bb, \u0430 \u043d\u0435 \u043a\u0430\u043a \u0431\u0430\u0433.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u043e\u0442 \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442 \u0434\u0430\u0451\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e <code>update<\/code>, \u043d\u043e \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 <code>chunk()<\/code>, \u0438 \u043b\u044e\u0431\u0430\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 (\u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u043e\u0440\u043a\u0435\u0440, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0434\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<h4>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f chunkById()<\/h4>\n<ul>\n<li>\n<p>\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>id<\/code>). \u0421\u0432\u043e\u0439 <code>orderBy()<\/code> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 <code>chunkById()<\/code> \u043d\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f: \u043c\u0435\u0442\u043e\u0434 \u0441\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043b\u044e\u0447 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u044b\u043c. \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 <code>join<\/code>, \u0430 \u0432 \u043e\u0431\u0435\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0435\u0441\u0442\u044c <code>id<\/code>, \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0438 \u0430\u043b\u0438\u0430\u0441: <code>chunkById(1000, $callback, 'orders.id', 'id')<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d \u043e\u0431\u0445\u043e\u0434 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0435\u0441\u0442\u044c <code>chunkByIdDesc()<\/code>.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u2014 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0439\u0442\u0435<\/h3>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0443\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 <code>UPDATE<\/code>: 100 000 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 51 \u0441\u0435\u043a\u0443\u043d\u0434\u0430. \u041a\u043e\u0433\u0434\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0431\u0435\u0437 PHP-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"php\">Order::where('status', 'new')-&gt;update(['status' =&gt; 'done']);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u043e\u0434<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0438\u043a \u043f\u0430\u043c\u044f\u0442\u0438<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0439 <code>update()<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">100 000<\/p>\n<\/td>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,16 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">+0,9 \u041c\u0411<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441 <code>chunkById()<\/code> + <code>$order-&gt;update()<\/code> \u2014 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0432 300 \u0440\u0430\u0437 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0426\u0435\u043d\u0430: \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0439 <code>update()<\/code> \u043d\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f Eloquent (<code>updating<\/code>, <code>updated<\/code>, <code>saved<\/code>), \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0438 \u0438 \u043c\u0443\u0442\u0430\u0442\u043e\u0440\u044b, \u0430 <code>updated_at<\/code> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0443 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0438\u0441\u0438\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 (\u0430\u0443\u0434\u0438\u0442, \u0441\u0431\u0440\u043e\u0441 \u043a\u0435\u0448\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439), \u0435\u0451 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u044f\u0432\u043d\u043e \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0448\u0442\u0443\u0447\u043d\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 <code>chunkById()<\/code> \u0438 \u043e\u0434\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0430\u0447\u043a\u0443:<\/p>\n<pre><code class=\"php\">Order::where('status', 'new')-&gt;chunkById(1000, function ($orders) {    \/\/ \u0441\u0432\u043e\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432 PHP, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430    Order::whereKey($orders-&gt;modelKeys())-&gt;update(['status' =&gt; 'done']);});<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e 100 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u043e 100 000, \u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f.<\/p>\n<h3>cursor(): \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0445\u043e\u0440\u043e\u0448 \u0438 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442<\/h3>\n<p><code>cursor()<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0447\u0435\u0440\u0435\u0437 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 PHP. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p><strong>\u041d\u0435\u0442 eager loading.<\/strong> <code>with()<\/code> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 <code>cursor()<\/code> \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0441\u0432\u044f\u0437\u0438 \u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u043d\u0438\u0432\u043e, \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c N+1. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u044b \u0441\u0432\u044f\u0437\u0438, \u0431\u0435\u0440\u0438\u0442\u0435 <code>lazyById()<\/code> \u2014 \u043e\u043d \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0447\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.<\/strong> \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Laravel \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e PDO \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0441\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0443 MySQL \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0438 \u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 <code>cursor()<\/code> \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c, \u0445\u043e\u0442\u044c \u0438 \u043f\u043e\u0437\u0436\u0435, \u0447\u0435\u043c <code>all()<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u044b\u0440\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u0438. \u0412 \u043d\u0430\u0448\u0438\u0445 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 SQLite \u043e\u0442\u0434\u0430\u0451\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u043e\u0434\u043d\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0446\u0438\u0444\u0440\u0430 +1,1 \u041c\u0411 \u043a MySQL \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u043e\u043b\u0433\u0438\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441.<\/strong> \u041f\u043e\u043a\u0430 \u0438\u0434\u0451\u0442 \u043e\u0431\u0445\u043e\u0434, \u043a\u0443\u0440\u0441\u043e\u0440 \u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0415\u0441\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u043a\u043b\u0430 \u043f\u0438\u0448\u0435\u0442\u0435 \u0432 \u0442\u0443 \u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0421\u0423\u0411\u0414 \u0438 \u0443\u0440\u043e\u0432\u043d\u044f \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438. \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u043d\u0430\u0434\u0451\u0436\u043d\u0435\u0435 \u043f\u0430\u0447\u043a\u0438 \u043f\u043e \u043a\u043b\u044e\u0447\u0443.<\/p>\n<\/li>\n<\/ol>\n<h3>\u041a\u0430\u043a \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c<\/h3>\n<ul>\n<li>\n<p>\u041d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u2192 \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0439 <code>update()<\/code> \/ <code>delete()<\/code> \u043d\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 PHP \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u0430\u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u2192 <code>chunkById()<\/code> \u0438\u043b\u0438 <code>lazyById()<\/code>, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 <code>chunk()<\/code>\/<code>lazy()<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0443\u0436\u0435\u043d \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u2192 <code>chunk()<\/code> \u0438\u043b\u0438 <code>lazy()<\/code> \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435, \u0431\u0435\u0437 \u0441\u0432\u044f\u0437\u0435\u0439, \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0421\u0423\u0411\u0414 \u0431\u0435\u0437 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u2192 <code>cursor()<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>all()<\/code> \/ <code>get()<\/code> \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u2192 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446, \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043c\u0430\u043b \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041a\u0430\u043a \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0442\u0435\u0441\u0442\u043e\u043c<\/h3>\n<p>\u041b\u043e\u0432\u0443\u0448\u043a\u0430 \u0441 <code>chunk()<\/code> \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0447\u0438\u0441\u043b\u0435 \u0441\u0442\u0440\u043e\u043a \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0430\u0447\u043a\u0438. \u0422\u0435\u0441\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0435 \u043f\u0430\u0447\u043a\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0430 \u043d\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439:<\/p>\n<pre><code class=\"php\">public function test_all_new_orders_are_processed(): void{    Order::factory()-&gt;count(2500)-&gt;create(['status' =&gt; 'new']);    (new CloseNewOrders)-&gt;handle(); \/\/ \u0437\u0430\u0434\u0430\u0447\u0430, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 chunkById(1000, ...)    $this-&gt;assertSame(0, Order::where('status', 'new')-&gt;count());}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421 <code>chunk(1000)<\/code> \u0442\u0430\u043a\u043e\u0439 \u0442\u0435\u0441\u0442 \u0443\u043f\u0430\u0434\u0451\u0442: \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f 1000 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a (\u043f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 1\u20131000, \u0432\u0442\u043e\u0440\u043e\u0439 \u0441 <code>offset 1000<\/code> \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 2001\u20132500, \u0430 \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0430\u0447\u043a\u0430 \u043d\u0435\u043f\u043e\u043b\u043d\u0430\u044f, \u0446\u0438\u043a\u043b \u043d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u0447\u043a\u0438 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0438\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c, \u0432 \u0442\u0435\u0441\u0442\u0435 \u0435\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043e 10, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u044b\u0441\u044f\u0447\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<h3>\u0421\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u043c\u0435\u0440\u043e\u0432<\/h3>\n<pre><code class=\"php\">&lt;?php\/\/ php bench.php seed   \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0430\u0437\u0443\/\/ php bench.php &lt;mode&gt; \u2014 get|chunk|chunkById|lazy|lazyById|cursor|chunk-update|chunkById-update|mass-updaterequire __DIR__.'\/vendor\/autoload.php';$app = require __DIR__.'\/bootstrap\/app.php';$app-&gt;make(Illuminate\\Contracts\\Console\\Kernel::class)-&gt;bootstrap();use Illuminate\\Database\\Eloquent\\Model;use Illuminate\\Support\\Facades\\{DB, Schema};config(['database.connections.bench' =&gt; [    'driver' =&gt; 'sqlite', 'database' =&gt; '\/tmp\/bench.sqlite',    'prefix' =&gt; '', 'foreign_key_constraints' =&gt; false,]]);DB::setDefaultConnection('bench');class Order extends Model { protected $guarded = []; public $timestamps = false; }$mode = $argv[1];$N = 100000;if ($mode === 'seed') {    @unlink('\/tmp\/bench.sqlite'); touch('\/tmp\/bench.sqlite');    Schema::create('orders', function ($t) {        $t-&gt;id(); $t-&gt;string('status'); $t-&gt;text('payload'); $t-&gt;integer('amount');    });    DB::transaction(function () use ($N) {        for ($i = 0; $i &lt; $N; $i += 500) {            $rows = [];            for ($j = 0; $j &lt; 500; $j++) {                $rows[] = ['status' =&gt; 'new', 'payload' =&gt; str_repeat('x', 200), 'amount' =&gt; $i + $j];            }            DB::table('orders')-&gt;insert($rows);        }    });    exit(\"seeded $N\\n\");}DB::table('orders')-&gt;update(['status' =&gt; 'new']); \/\/ \u0441\u0431\u0440\u043e\u0441 \u043f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u043cgc_collect_cycles();memory_reset_peak_usage();$base = memory_get_usage();$t = hrtime(true);$n = 0; $q = 0;DB::listen(function () use (&amp;$q) { $q++; });switch ($mode) {    case 'get':       foreach (Order::all() as $o) { $n++; } break;    case 'chunk':     Order::query()-&gt;orderBy('id')-&gt;chunk(1000, function ($c) use (&amp;$n) { $n += $c-&gt;count(); }); break;    case 'chunkById': Order::query()-&gt;chunkById(1000, function ($c) use (&amp;$n) { $n += $c-&gt;count(); }); break;    case 'lazy':      foreach (Order::query()-&gt;lazy(1000) as $o) { $n++; } break;    case 'lazyById':  foreach (Order::query()-&gt;lazyById(1000) as $o) { $n++; } break;    case 'cursor':    foreach (Order::query()-&gt;cursor() as $o) { $n++; } break;    case 'chunk-update':        Order::where('status', 'new')-&gt;orderBy('id')-&gt;chunk(1000, function ($c) use (&amp;$n) {            foreach ($c as $o) { $o-&gt;update(['status' =&gt; 'done']); $n++; }        });        break;    case 'chunkById-update':        Order::where('status', 'new')-&gt;chunkById(1000, function ($c) use (&amp;$n) {            foreach ($c as $o) { $o-&gt;update(['status' =&gt; 'done']); $n++; }        });        break;    case 'mass-update':        $n = Order::where('status', 'new')-&gt;update(['status' =&gt; 'done']);        break;}$left = DB::table('orders')-&gt;where('status', 'new')-&gt;count();printf(\"%-17s rows=%6d queries=%6d time=%6.2fs peak=+%5.1f MB left_new=%d\\n\",    $mode, $n, $q, (hrtime(true) - $t) \/ 1e9, (memory_get_peak_usage() - $base) \/ 1048576, $left);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a: <code>php bench.php seed<\/code>, \u0437\u0430\u0442\u0435\u043c <code>php -d memory_limit=-1 bench.php &lt;mode&gt;<\/code> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 (\u0431\u0435\u0437 \u0441\u043d\u044f\u0442\u0438\u044f \u043b\u0438\u043c\u0438\u0442\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 <code>all()<\/code> \u043d\u0435 \u0443\u043b\u043e\u0436\u0438\u0442\u0441\u044f \u0432 128 \u041c\u0411).<\/p>\n<h3>\u0418\u0442\u043e\u0433<\/h3>\n<p><code>chunk()<\/code> \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0445\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0431\u044d\u043a \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u0434\u0451\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>chunkById()<\/code>\/<code>lazyById()<\/code>, \u0430 \u0435\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432 PHP \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u2014 \u043e\u0434\u0438\u043d \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u0435\u0441\u0442\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u0440\u043e\u043a \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u043f\u0430\u0447\u043a\u0443, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1101458\/\">https:\/\/habr.com\/ru\/articles\/1101458\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a\u043e\u0433\u0434\u0430 \u0432 Laravel \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442 \u00ab\u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c all(), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c chunk()\u00bb. \u0421\u043e\u0432\u0435\u0442 \u0432\u0435\u0440\u043d\u044b\u0439, \u043d\u043e \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u0439: \u0443 chunk() \u0435\u0441\u0442\u044c \u043b\u043e\u0432\u0443\u0448\u043a\u0430, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0438\u0445\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a, \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439. \u041d\u0438\u0436\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u043f\u044f\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043e\u0431\u0445\u043e\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430 100 000 \u0441\u0442\u0440\u043e\u043a, \u0440\u0430\u0437\u0431\u043e\u0440 \u0442\u043e\u0433\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043f\u043e\u0442\u0435\u0440\u044f \u0441\u0442\u0440\u043e\u043a, \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u0430.\u0421\u0442\u0435\u043d\u0434Laravel 13.39.0, PHP 8.4.27 (CLI), SQLite 3.46.1, \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430;\u0442\u0430\u0431\u043b\u0438\u0446\u0430 orders: id, status (string), payload (text, 200 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432), amount (integer), 100 000 \u0441\u0442\u0440\u043e\u043a;\u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c PHP; \u043f\u0430\u043c\u044f\u0442\u044c \u2014 memory_get_peak_usage() \u043c\u0438\u043d\u0443\u0441 memory_get_usage() \u043f\u0435\u0440\u0435\u0434 \u043e\u0431\u0445\u043e\u0434\u043e\u043c (\u043f\u043e\u0441\u043b\u0435 memory_reset_peak_usage());\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 DB::listen(); \u0432 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0432\u0445\u043e\u0434\u0438\u0442 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 count() \u0432 \u043a\u043e\u043d\u0446\u0435.\u0412\u0440\u0435\u043c\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u0421\u0423\u0411\u0414, \u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435. \u0427\u0438\u0441\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0447\u0438\u0441\u043b\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043e\u0442 \u0436\u0435\u043b\u0435\u0437\u0430 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442. \u0421\u043a\u0440\u0438\u043f\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.\u0427\u0442\u0435\u043d\u0438\u0435: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0442\u043e\u0438\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u041c\u043e\u0434\u0435\u043b\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f:use Illuminate\\Database\\Eloquent\\Model;class Order extends Model{    protected $guarded = [];    public $timestamps = false;}\u041f\u044f\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043e\u0431\u0445\u043e\u0434\u0430 \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a:\/\/ 1. \u0412\u0441\u0451 \u0432 \u043e\u0434\u043d\u0443 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044eforeach (Order::all() as $order) { \/* &#8230; *\/ }\/\/ 2. \u041f\u0430\u0447\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 LIMIT\/OFFSETOrder::query()-&gt;orderBy(&#8216;id&#8217;)-&gt;chunk(1000, function ($orders) { \/* &#8230; *\/ });\/\/ 3. \u041f\u0430\u0447\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 WHERE id &gt; \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439_idOrder::query()-&gt;chunkById(1000, function ($orders) { \/* &#8230; *\/ });\/\/ 4. LazyCollection \u043f\u043e\u0432\u0435\u0440\u0445 \u043f\u0430\u0447\u0435\u043a (lazy \u2014 OFFSET, lazyById \u2014 \u043f\u043e \u043a\u043b\u044e\u0447\u0443)foreach (Order::query()-&gt;lazy(1000) as $order) { \/* &#8230; *\/ }foreach (Order::query()-&gt;lazyById(1000) as $order) { \/* &#8230; *\/ }\/\/ 5. \u041e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441, \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043e\u0434\u043d\u043e\u0439foreach (Order::query()-&gt;cursor() as $order) { \/* &#8230; *\/ }\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:\u041c\u0435\u0442\u043e\u0434\u0421\u0442\u0440\u043e\u043a\u0417\u0430\u043f\u0440\u043e\u0441\u043e\u0432\u0412\u0440\u0435\u043c\u044f\u041f\u0438\u043a \u043f\u0430\u043c\u044f\u0442\u0438all()100 00021,52 \u0441+136,0 \u041c\u0411chunk(1000)100 0001020,99 \u0441+2,4 \u041c\u0411chunkById(1000)100 0001020,76 \u0441+2,4 \u041c\u0411lazy(1000)100 0001020,98 \u0441+2,4 \u041c\u0411lazyById(1000)100 0001020,78 \u0441+2,4 \u041c\u0411cursor()100 00020,89 \u0441+1,1 \u041c\u0411\u0427\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442:all() \u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0441\u0435 100 000 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0441\u0440\u0430\u0437\u0443: 136 \u041c\u0411 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0433\u0434\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043a\u043e\u043b\u043e 20 \u041c\u0411. \u041a\u0430\u0436\u0434\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c Eloquent \u0445\u0440\u0430\u043d\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u044b attributes \u0438 original, \u043f\u043b\u044e\u0441 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u041f\u0440\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c memory_limit = 128M \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u043f\u0430\u043b \u0431\u044b.\u041f\u0430\u043a\u0435\u0442\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0435\u043b\u0430\u044e\u0442 101 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0443: 100 \u043f\u043e\u043b\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043f\u0443\u0441\u0442\u0443\u044e, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c. \u041f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u0440\u0430\u0441\u0442\u0451\u0442 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043f\u0430\u0447\u043a\u0438.\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u00ab\u043f\u043e \u043a\u043b\u044e\u0447\u0443\u00bb \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0442\u0435\u043d\u0434\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0441 OFFSET. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e OFFSET 99000 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0421\u0423\u0411\u0414 \u043f\u0440\u043e\u0439\u0442\u0438 \u0438 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u044c 99 000 \u0441\u0442\u0440\u043e\u043a, \u0430 WHERE id &gt; ? \u0441\u0440\u0430\u0437\u0443 \u0438\u0434\u0451\u0442 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430. \u041d\u0430 100 000 \u0441\u0442\u0440\u043e\u043a \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u2014 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432, \u043d\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u0445 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u043f\u043e\u0437\u0434\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 OFFSET \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435.cursor() \u2014 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u0441\u0430\u043c\u0430\u044f \u043d\u0438\u0437\u043a\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0432 PHP, \u043d\u043e \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0438\u0436\u0435.\u041b\u043e\u0432\u0443\u0448\u043a\u0430: chunk() \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438\u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0437\u0430\u043a\u0430\u0437\u044b \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 new \u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432 done.Order::where(&#8216;status&#8217;, &#8216;new&#8217;)    -&gt;orderBy(&#8216;id&#8217;)    -&gt;chunk(1000, function ($orders) {        foreach ($orders as $order) {            $order-&gt;update([&#8216;status&#8217; =&gt; &#8216;done&#8217;]);        }    });\u041a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438 \u043f\u0430\u0434\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u0441\u0442\u0435\u043d\u0434\u0435:\u041c\u0435\u0442\u043e\u0434\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c new\u0417\u0430\u043f\u0440\u043e\u0441\u043e\u0432\u0412\u0440\u0435\u043c\u044fchunk(1000) + update()50 00050 00050 05227,36 \u0441chunkById(1000) + update()100 0000100 10251,54 \u0441chunk() \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0440\u043e\u0432\u043d\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a. \u041c\u0435\u0445\u0430\u043d\u0438\u043a\u0430 \u0442\u0430\u043a\u0430\u044f. chunk() \u0441\u0442\u0440\u043e\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u0438\u0434\u0430:select * from orders where status = &#8216;new&#8217; order by id limit 1000 offset 0select * from orders where status = &#8216;new&#8217; order by id limit 1000 offset 1000select * from orders where status = &#8216;new&#8217; order by id limit 1000 offset 2000&#8230;\u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0430\u0447\u043a\u0438 1000 \u0441\u0442\u0440\u043e\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e\u0442 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044e status = &#8216;new&#8217;. \u0412\u044b\u0431\u043e\u0440\u043a\u0430 \u00ab\u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f\u00bb \u043d\u0430 1000 \u0441\u0442\u0440\u043e\u043a \u0432\u043f\u0435\u0440\u0451\u0434, \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 offset 1000 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u044b\u0441\u044f\u0447\u0443 \u0435\u0449\u0451 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435: \u043e\u0434\u043d\u0430 \u043f\u0430\u0447\u043a\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e 50 \u0438\u0437 100 \u043f\u0430\u0447\u0435\u043a.chunkById() \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0443\u0432\u0438\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430:select * from orders where status = &#8216;new&#8217; order by id limit 1000select * from orders where status = &#8216;new&#8217; and id &gt; 1000 order by id limit 1000select * from orders where status = &#8216;new&#8217; and id &gt; 2000 order by id limit 1000\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u0445\u043e\u0434\u044f\u0442 \u0438\u0437 \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u043d\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e id, \u0430 \u043d\u0435 \u043a \u043d\u043e\u043c\u0435\u0440\u0443 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Laravel \u043f\u0440\u044f\u043c\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 chunkById() \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043b\u0431\u044d\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u0434\u0451\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f. \u0422\u0430 \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0430 lazy() \u043f\u0440\u043e\u0442\u0438\u0432 lazyById(): lazy() \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 OFFSET \u0438 \u0442\u0435\u0440\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438.\u041b\u043e\u0432\u0443\u0448\u043a\u0443 \u0442\u0440\u0443\u0434\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e:\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u00ab\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u00bb;\u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 (\u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u0447\u043a\u0438) \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0432\u0435\u0434\u044c \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0435\u0442;\u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0445 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f (50 %, \u043f\u043e\u0442\u043e\u043c 25 % \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435), \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u00ab\u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u00bb, \u0430 \u043d\u0435 \u043a\u0430\u043a \u0431\u0430\u0433.\u0422\u043e\u0442 \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442 \u0434\u0430\u0451\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e update, \u043d\u043e \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 chunk(), \u0438 \u043b\u044e\u0431\u0430\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 (\u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u043e\u0440\u043a\u0435\u0440, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0434\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438.\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f chunkById()\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e id). \u0421\u0432\u043e\u0439 orderBy() \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 chunkById() \u043d\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f: \u043c\u0435\u0442\u043e\u0434 \u0441\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c.\u041a\u043b\u044e\u0447 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u044b\u043c. \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 join, \u0430 \u0432 \u043e\u0431\u0435\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0435\u0441\u0442\u044c id, \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0438 \u0430\u043b\u0438\u0430\u0441: chunkById(1000, $callback, &#8216;orders.id&#8217;, &#8216;id&#8217;).\u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d \u043e\u0431\u0445\u043e\u0434 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0435\u0441\u0442\u044c chunkByIdDesc().\u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u2014 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0439\u0442\u0435\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0443\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 UPDATE: 100 000 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 51 \u0441\u0435\u043a\u0443\u043d\u0434\u0430. \u041a\u043e\u0433\u0434\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0431\u0435\u0437 PHP-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430:Order::where(&#8216;status&#8217;, &#8216;new&#8217;)-&gt;update([&#8216;status&#8217; =&gt; &#8216;done&#8217;]);\u041c\u0435\u0442\u043e\u0434\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e\u0417\u0430\u043f\u0440\u043e\u0441\u043e\u0432\u0412\u0440\u0435\u043c\u044f\u041f\u0438\u043a \u043f\u0430\u043c\u044f\u0442\u0438\u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0439 update()100 00020,16 \u0441+0,9 \u041c\u0411\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441 chunkById() + $order-&gt;update() \u2014 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0432 300 \u0440\u0430\u0437 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0426\u0435\u043d\u0430: \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0439 update() \u043d\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f Eloquent (updating, updated, saved), \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0438 \u0438 \u043c\u0443\u0442\u0430\u0442\u043e\u0440\u044b, \u0430 updated_at \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0443 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0438\u0441\u0438\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 (\u0430\u0443\u0434\u0438\u0442, \u0441\u0431\u0440\u043e\u0441 \u043a\u0435\u0448\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439), \u0435\u0451 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u044f\u0432\u043d\u043e \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0448\u0442\u0443\u0447\u043d\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435.\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 chunkById() \u0438 \u043e\u0434\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0430\u0447\u043a\u0443:Order::where(&#8216;status&#8217;, &#8216;new&#8217;)-&gt;chunkById(1000, function ($orders) {    \/\/ \u0441\u0432\u043e\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432 PHP, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430    Order::whereKey($orders-&gt;modelKeys())-&gt;update([&#8216;status&#8217; =&gt; &#8216;done&#8217;]);});\u042d\u0442\u043e 100 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u043e 100 000, \u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f.cursor(): \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0445\u043e\u0440\u043e\u0448 \u0438 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442cursor() \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0447\u0435\u0440\u0435\u0437 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 PHP. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:\u041d\u0435\u0442 eager loading. with() \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 cursor() \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0441\u0432\u044f\u0437\u0438 \u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u043d\u0438\u0432\u043e, \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c N+1. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u044b \u0441\u0432\u044f\u0437\u0438, \u0431\u0435\u0440\u0438\u0442\u0435 lazyById() \u2014 \u043e\u043d \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0447\u043a\u0438.\u0411\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Laravel \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e PDO \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0441\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0443 MySQL \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0438 \u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 cursor() \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c, \u0445\u043e\u0442\u044c \u0438 \u043f\u043e\u0437\u0436\u0435, \u0447\u0435\u043c all(), \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u044b\u0440\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u0438. \u0412 \u043d\u0430\u0448\u0438\u0445 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 SQLite \u043e\u0442\u0434\u0430\u0451\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u043e\u0434\u043d\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0446\u0438\u0444\u0440\u0430 +1,1 \u041c\u0411 \u043a MySQL \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f.\u0414\u043e\u043b\u0433\u0438\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u041f\u043e\u043a\u0430 \u0438\u0434\u0451\u0442 \u043e\u0431\u0445\u043e\u0434, \u043a\u0443\u0440\u0441\u043e\u0440 \u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0415\u0441\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u043a\u043b\u0430 \u043f\u0438\u0448\u0435\u0442\u0435 \u0432 \u0442\u0443 \u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0421\u0423\u0411\u0414 \u0438 \u0443\u0440\u043e\u0432\u043d\u044f \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438. \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u043d\u0430\u0434\u0451\u0436\u043d\u0435\u0435 \u043f\u0430\u0447\u043a\u0438 \u043f\u043e \u043a\u043b\u044e\u0447\u0443.\u041a\u0430\u043a \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c\u041d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u2192 \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0439 update() \/ delete() \u043d\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439.\u041d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 PHP \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u0430\u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u2192 chunkById() \u0438\u043b\u0438 lazyById(), \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 chunk()\/lazy().\u041d\u0443\u0436\u0435\u043d \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u2192 chunk() \u0438\u043b\u0438 lazy() \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b.\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435, \u0431\u0435\u0437 \u0441\u0432\u044f\u0437\u0435\u0439, \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0421\u0423\u0411\u0414 \u0431\u0435\u0437 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u2192 cursor().all() \/ get() \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u2192 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446, \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043c\u0430\u043b \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438.\u041a\u0430\u043a \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0442\u0435\u0441\u0442\u043e\u043c\u041b\u043e\u0432\u0443\u0448\u043a\u0430 \u0441 chunk() \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0447\u0438\u0441\u043b\u0435 \u0441\u0442\u0440\u043e\u043a \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0430\u0447\u043a\u0438. \u0422\u0435\u0441\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0435 \u043f\u0430\u0447\u043a\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0430 \u043d\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439:public function test_all_new_orders_are_processed(): void{    Order::factory()-&gt;count(2500)-&gt;create([&#8216;status&#8217; =&gt; &#8216;new&#8217;]);    (new CloseNewOrders)-&gt;handle(); \/\/ \u0437\u0430\u0434\u0430\u0447\u0430, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 chunkById(1000, &#8230;)    $this-&gt;assertSame(0, Order::where(&#8216;status&#8217;, &#8216;new&#8217;)-&gt;count());}\u0421 chunk(1000) \u0442\u0430\u043a\u043e\u0439 \u0442\u0435\u0441\u0442 \u0443\u043f\u0430\u0434\u0451\u0442: \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f 1000 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a (\u043f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 1\u20131000, \u0432\u0442\u043e\u0440\u043e\u0439 \u0441 offset 1000 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 2001\u20132500, \u0430 \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0430\u0447\u043a\u0430 \u043d\u0435\u043f\u043e\u043b\u043d\u0430\u044f, \u0446\u0438\u043a\u043b \u043d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f).\u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u0447\u043a\u0438 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0438\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c, \u0432 \u0442\u0435\u0441\u0442\u0435 \u0435\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043e 10, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u044b\u0441\u044f\u0447\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.\u0421\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u043c\u0435\u0440\u043e\u0432&lt;?php\/\/ php bench.php seed   \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0430\u0437\u0443\/\/ php bench.php &lt;mode&gt; \u2014 get|chunk|chunkById|lazy|lazyById|cursor|chunk-update|chunkById-update|mass-updaterequire __DIR__.&#8217;\/vendor\/autoload.php&#8217;;$app = require __DIR__.&#8217;\/bootstrap\/app.php&#8217;;$app-&gt;make(Illuminate\\Contracts\\Console\\Kernel::class)-&gt;bootstrap();use Illuminate\\Database\\Eloquent\\Model;use Illuminate\\Support\\Facades\\{DB, Schema};config([&#8216;database.connections.bench&#8217; =&gt; [    &#8216;driver&#8217; =&gt; &#8216;sqlite&#8217;, &#8216;database&#8217; =&gt; &#8216;\/tmp\/bench.sqlite&#8217;,    &#8216;prefix&#8217; =&gt; &#187;, &#8216;foreign_key_constraints&#8217; =&gt; false,]]);DB::setDefaultConnection(&#8216;bench&#8217;);class Order extends Model { protected $guarded = []; public $timestamps = false; }$mode = $argv[1];$N = 100000;if ($mode ===&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-500960","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500960","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=500960"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500960\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=500960"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=500960"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=500960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}