SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Indeks berbasis Ekspresi SQLite

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.

  1. Ekspresi harus merujuk ke kolom tabel yang sedang diindeks saja. Itu tidak bisa merujuk ke kolom tabel lain.
  2. Ekspresi hanya dapat menggunakan pemanggilan fungsi deterministik.
  3. Ekspresi tidak dapat menggunakan subkueri.

Dalam tutorial ini, Anda telah mempelajari cara menggunakan indeks berbasis ekspresi SQLite untuk meningkatkan kinerja kueri.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 Cara untuk Mengembalikan Nilai Numerik dari Kolom Database SQLite

  2. Bagaimana cara mengatur ulang basis data SqLite di Android?

  3. SQLite - Perbarui Data

  4. Tidak dapat menyalin db yang dibuat sebelumnya dari aset

  5. Bagaimana saya bisa membaca data dari DB terenkripsi menggunakan SQLiteAssetHelper?