Menu

🚀 Optimizing Database Queries in Laravel: get() vs chunk() vs cursor()

🚀 Optimizing Database Queries in Laravel: get() vs chunk() vs cursor()

🚀 Optimizing Database Queries in Laravel: get() vs chunk() vs cursor()

While working on real-world production systems, choosing the right data-fetching strategy in Laravel can make a huge difference in performance and memory usage.

Recently, I worked on fetching featured categories and implemented three different approaches:

🔹 get()

Fetches all records at once

Clean and fast for small datasets

Can cause memory issues with large data

🔹 chunk()

Processes records in batches (e.g. 200 at a time)

Ideal for large datasets and background jobs

Production-safe and memory efficient

🔹 cursor()

Streams records one by one

Lowest memory consumption

Best for huge datasets and limited-memory environments

📌 Key takeaway:

There’s no “one-size-fits-all” solution.

Choosing the right method depends on data size, use case, and system constraints.










Building scalable applications isn’t just about writing queries — it’s about writing the right queries for the right scenario.

$Featured = DB::table('categories')

    ->select(

        'id',

        'ThumbnailImg',

        'CateTitle',

        'CatAvgRating',

        'CatTotalReview',

        'CateSlug',

        'CateIcon',

        'CateFeatFlag'

    )

    ->where('domainID', $domainID)

    ->whereNull('ParentID')

    ->where('CateStatusFlag', 1)

    ->where('CateFeatFlag', 1)

    ->orderBy('CateFeatFlag', 'desc')

    ->orderBy('CateTitle', 'ASC')

    ->get();


$Featured = collect();


DB::table('categories')

    ->select(

        'id',

        'ThumbnailImg',

        'CateTitle',

        'CatAvgRating',

        'CatTotalReview',

        'CateSlug',

        'CateIcon',

        'CateFeatFlag'

    )

    ->where('domainID', $domainID)

    ->whereNull('ParentID')

    ->where('CateStatusFlag', 1)

    ->where('CateFeatFlag', 1)

    ->orderBy('CateFeatFlag', 'desc')

    ->orderBy('CateTitle', 'ASC')

    ->chunk(200, function ($rows) use (&$Featured) {

        foreach ($rows as $row) {

            $Featured->push($row);

        }

    });



$Featured = [];

$rows = DB::table('categories')
    ->select(
        'id',
        'ThumbnailImg',
        'CateTitle',
        'CatAvgRating',
        'CatTotalReview',
        'CateSlug',
        'CateIcon',
        'CateFeatFlag'
    )
    ->where('domainID', $domainID)
    ->whereNull('ParentID')
    ->where('CateStatusFlag', 1)
    ->where('CateFeatFlag', 1)
    ->orderBy('CateFeatFlag', 'desc')
    ->orderBy('CateTitle', 'ASC')
    ->cursor();

foreach ($rows as $row) {
    $Featured[] = $row;
}

Flow-chart laravel

Contact