KodeJs
Cara Menggunakan Database Indexing di Laravel 13
Laravel3 menit baca

Cara Menggunakan Database Indexing di Laravel 13

Kembali ke Blog
Egi Samsul Mu'arifEgi Samsul Mu'arif8 September 20263 menit baca

Tutorial mempercepat kueri database Laravel 13 menggunakan Database Indexing. Solusi ampuh atasi query lambat saat data aplikasi makin membengkak!

Saat aplikasi Laravel 13 kamu baru diluncurkan dan hanya memiliki puluhan data, semua halaman web akan terasa sangat cepat. Namun, ketika jumlah baris data di tabel database melonjak hingga ratusan ribu atau jutaan data, perintah WHERE, ORDER BY, dan JOIN akan mulai terasa lambat secara signifikan.

Solusi paling ampuh dan fundamental untuk mengatasi masalah ini tanpa perlu terburu-buru melakukan upgrade spesifikasi server adalah dengan menerapkan Database Indexing.

Artikel ini akan mengulas konsep Database Indexing di Laravel 13, kapan kamu harus menggunakannya, dan cara mendaftarkannya melalui file Migration.

Apa Itu Database Indexing?

Bayangkan sebuah buku tebal setebal 1.000 halaman tanpa daftar isi. Jika kamu diminta mencari topik tertentu, kamu harus membuka lembar demi lembar dari halaman pertama hingga akhir (Full Table Scan).

Database Indexing bekerja persis seperti Daftar Isi Buku. Database akan membuat struktur data pencarian khusus (biasanya berbasis B-Tree) untuk kolom tertentu, sehingga proses pencarian data dapat ditemukan secara instan tanpa perlu membaca seluruh isi tabel.

┌─────────────────────────────────────────────────────────────────────────┐
│                    PERBANDINGAN TANPA VS PAKAI INDEX                    │
├────────────────────────────────┬────────────────────────────────────────┤
│ Tanpa Index (Full Table Scan)  │ Menggunakan Index (B-Tree Search)      │
├────────────────────────────────┼────────────────────────────────────────┤
│ • Membaca seluruh juta baris   │ • Menuju lokasi data secara presisi    │
│ • Waktu Kueri: 2.500 ms (2,5s) │ • Waktu Kueri: 12 ms (Sangat Cepat)    │
│ • Beban CPU Server: Tinggi     │ • Beban CPU Server: Sangat Rendah      │
└────────────────────────────────┴────────────────────────────────────────┘

1. Cara Menambahkan Index di Migration Laravel 13

Kamu dapat menambahkan penanda indeks langsung pada definisi kolom saat membuat atau mengubah tabel menggunakan schema builder Laravel.

A. Single Column Index (Indeks Kolom Tunggal)

Cocok digunakan pada kolom yang sangat sering dijadikan kriteria pencarian di klausa WHERE.

PHP

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique(); // Unique otomatis menjadi Index
            
            // Menambahkan index pada kolom status dan sku
            $table->string('status')->index(); 
            $table->string('sku')->index();
            
            $table->timestamps();
        });
    }
};

B. Compound / Composite Index (Indeks Gabungan)

Jika kamu sering melakukan kueri yang melibatkan dua atau lebih kolom sekaligus dalam klausa WHERE, buatlah Composite Index:

PHP

// Mengoptimalkan kueri: WHERE status = 'active' AND role = 'admin'
$table->index(['status', 'role']);

2. Menambahkan Index pada Tabel yang Sudah Ada

Jika aplikasi kamu sudah berjalan (production) dan kamu ingin menambahkan index tanpa menghapus data yang ada, buat file migration baru:

Bash

php artisan make:migration add_index_to_products_table

Buka file migration tersebut dan tuliskan:

PHP

public function up(): void
{
    Schema::table('products', function (Blueprint $table) {
        // Menambahkan composite index
        $table->index(['category_id', 'is_active']);
    });
}

public function down(): void
{
    Schema::table('products', function (Blueprint $table) {
        // Menghapus index jika di-rollback
        $table->dropIndex(['category_id', 'is_active']);
    });
}

Jalankan perintah migrasi:

Bash

php artisan migrate

Kapan Harus (dan Tidak Boleh) Menggunakan Index?

Meskipun indexing membuat pencarian data menjadi super cepat, kamu tidak boleh memasang index di semua kolom secara sembarangan.

  • GUNAKAN INDEX PADA:

    • Kolom Foreign Key (misal: user_id, category_id).

    • Kolom yang sering masuk di klausa WHERE, ORDER BY, dan GROUP BY.

    • Kolom yang nilainya unik atau memiliki variasi tinggi (misal: email, slug, sku).

  • HINDARI INDEX PADA:

    • Tabel yang sangat sering di-INSERT atau UPDATE secara masif, karena database harus memperbarui struktur indeks setiap kali ada perubahan data.

    • Kolom dengan variasi data sangat rendah (misal: kolom gender yang hanya berisi L/P).

Kesimpulan

Penerapan Database Indexing di Laravel 13 adalah teknik optimasi paling berbiaya murah dengan dampak performa yang sangat luar biasa. Cukup dengan menambahkan klausa ->index() pada kolom yang tepat, kueri database kamu yang tadinya lambat bisa menjadi beberapa milidetik saja.


Egi Samsul Mu'arif

Ditulis oleh

Egi Samsul Mu'arif

Web & Mobile Developer

Artikel Terkait

Lihat semua