Ringkasan :dalam tutorial ini, Anda akan mempelajari cara menggunakan indeks berbasis ekspresi SQLite untuk mengkueri data guna meningkatkan kinerja kueri terutama untuk kueri yang menggunakan ekspresi atau fungsi.
Pengantar indeks berbasis ekspresi SQLite
Saat Anda membuat indeks, Anda sering menggunakan satu atau beberapa kolom dalam sebuah tabel. Selain indeks normal, SQLite memungkinkan Anda untuk membentuk indeks berdasarkan ekspresi yang melibatkan kolom tabel. Jenis indeks ini disebut indeks berbasis ekspresi.
Kueri berikut memilih pelanggan yang panjang perusahaannya lebih dari 10 karakter.
SELECT customerid,
company
FROM customers
WHERE length(company) > 10
ORDER BY length(company) DESC;
Code language: SQL (Structured Query Language) (sql)
Jika Anda menggunakan EXPLAIN QUERY PLAN
pernyataan, Anda akan menemukan bahwa perencana kueri SQLite harus memindai seluruh customers
tabel untuk mengembalikan kumpulan hasil.
EXPLAIN QUERY PLAN
SELECT customerid,
company
FROM customers
WHERE length(company) > 10
ORDER BY length(company) DESC;
Code language: SQL (Structured Query Language) (sql)
Perencana kueri SQLite adalah komponen perangkat lunak yang menentukan algoritme atau rencana kueri terbaik untuk mengeksekusi pernyataan SQL. Pada SQLite versi 3.8.0, komponen perencana kueri ditulis ulang agar berjalan lebih cepat dan menghasilkan rencana kueri yang lebih baik. Penulisan ulang ini dikenal sebagai perencana kueri generasi berikutnya atau NGQP.
Untuk membuat indeks berdasarkan ekspresi LENGTH(company)
, Anda menggunakan pernyataan berikut.
CREATE INDEX customers_length_company
ON customers(LENGTH(company));
Code language: SQL (Structured Query Language) (sql)
Sekarang jika Anda menjalankan kueri di atas lagi, SQLite akan menggunakan indeks ekspresi untuk mencari dan memilih data, yang mana lebih cepat.
Cara kerja indeks berbasis ekspresi SQLite
Perencana kueri SQLite menggunakan indeks berbasis ekspresi hanya ketika ekspresi, yang Anda tentukan di CREATE INDEX
pernyataan, muncul sama seperti pada klausa WHERE atau klausa ORDER BY.
Misalnya, dalam database sampel, kami memiliki invoice_items
tabel.
Pernyataan berikut membuat indeks menggunakan kolom harga satuan dan kuantitas.
CREATE INDEX invoice_line_amount
ON invoice_items(unitprice*quantity);
Code language: SQL (Structured Query Language) (sql)
Namun, saat Anda menjalankan kueri berikut:
EXPLAIN QUERY PLAN
SELECT invoicelineid,
invoiceid,
unitprice*quantity
FROM invoice_items
WHERE quantity*unitprice > 10;
Code language: SQL (Structured Query Language) (sql)
Perencana kueri SQLite tidak menggunakan indeks karena ekspresi dalam CREATE INDEX
( unitprice*quantity
) tidak sama dengan yang ada di WHERE
klausa (jumlah*harga satuan)
Pembatasan indeks berbasis ekspresi SQLite
Berikut ini daftar semua batasan pada ekspresi yang muncul di CREATE INDEX
pernyataan.
- Ekspresi harus merujuk ke kolom tabel yang sedang diindeks saja. Itu tidak bisa merujuk ke kolom tabel lain.
- Ekspresi hanya dapat menggunakan pemanggilan fungsi deterministik.
- Ekspresi tidak dapat menggunakan subkueri.
Dalam tutorial ini, Anda telah mempelajari cara menggunakan indeks berbasis ekspresi SQLite untuk meningkatkan kinerja kueri.