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

Indeks SQLite

Ringkasan :dalam tutorial ini, Anda akan mempelajari cara menggunakan indeks SQLite untuk membuat kueri data lebih cepat, mempercepat operasi pengurutan, dan menerapkan batasan unik.

Apa itu indeks?

Dalam database relasional, tabel adalah daftar baris. Pada saat yang sama, setiap baris memiliki struktur kolom yang sama yang terdiri dari sel. Setiap baris juga memiliki nomor urut rowid berurutan yang digunakan untuk mengidentifikasi baris. Oleh karena itu, Anda dapat menganggap tabel sebagai daftar pasangan:(baris, baris).

Tidak seperti tabel, indeks memiliki hubungan yang berlawanan:(baris, baris). Indeks adalah struktur data tambahan yang membantu meningkatkan kinerja kueri.

SQLite menggunakan B-tree untuk mengatur indeks. Perhatikan bahwa B singkatan dari balanced, B-tree adalah balanced tree, bukan binary tree.

B-tree menjaga jumlah data di kedua sisi pohon seimbang sehingga jumlah level yang harus dilalui untuk menemukan baris selalu dalam jumlah perkiraan yang sama. Selain itu, kueri menggunakan kesetaraan (=) dan rentang (>,>=, <,<=) pada indeks B-tree sangat efisien.

Bagaimana cara kerja indeks

Setiap indeks harus dikaitkan dengan tabel tertentu. Indeks terdiri dari satu atau lebih kolom, tetapi semua kolom indeks harus berada dalam tabel yang sama. Sebuah tabel mungkin memiliki beberapa indeks.

Setiap kali Anda membuat indeks, SQLite membuat struktur B-tree untuk menyimpan data indeks.

Indeks berisi data dari kolom yang Anda tentukan dalam indeks dan rowid yang sesuai nilai. Ini membantu SQLite dengan cepat menemukan baris berdasarkan nilai kolom yang diindeks.

Bayangkan sebuah indeks dalam database seperti indeks sebuah buku. Dengan melihat indeks, Anda dapat dengan cepat mengidentifikasi nomor halaman berdasarkan kata kunci.

SQLite CREATE INDEX pernyataan

Untuk membuat indeks, Anda menggunakan CREATE INDEX pernyataan dengan sintaks berikut:

CREATE [UNIQUE] INDEX index_name 
ON table_name(column_list);Code language: SQL (Structured Query Language) (sql)

Untuk membuat indeks, Anda menentukan tiga informasi penting:

  • Nama indeks setelah CREATE INDEX kata kunci.
  • Nama tabel milik indeks.
  • Daftar kolom indeks.

Jika Anda ingin memastikan bahwa nilai dalam satu atau beberapa kolom unik seperti email dan telepon, gunakan UNIQUE opsi di CREATE INDEX penyataan. CREATE UNIQUE INDEX membuat indeks unik baru.

SQLite UNIQUE contoh indeks

Mari buat tabel baru bernama contacts untuk demonstrasi.

CREATE TABLE contacts (
	first_name text NOT NULL,
	last_name text NOT NULL,
	email text NOT NULL
);Code language: SQL (Structured Query Language) (sql)

Cobalah

Misalkan, Anda ingin menegakkan bahwa email itu unik, Anda membuat indeks unik sebagai berikut:

CREATE UNIQUE INDEX idx_contacts_email 
ON contacts (email);Code language: SQL (Structured Query Language) (sql)

Cobalah

Untuk menguji ini.

Pertama, masukkan baris ke dalam contacts tabel.

INSERT INTO contacts (first_name, last_name, email)
VALUES('John','Doe','[email protected]');Code language: SQL (Structured Query Language) (sql)

Cobalah

Kedua, sisipkan baris lain dengan email duplikat.

INSERT INTO contacts (first_name, last_name, email)
VALUES('Johny','Doe','[email protected]');Code language: SQL (Structured Query Language) (sql)

Cobalah

SQLite mengeluarkan pesan kesalahan yang menunjukkan bahwa indeks unik telah dilanggar. Karena ketika Anda menyisipkan baris kedua, SQLite memeriksa dan memastikan bahwa email itu unik di seluruh baris di email dari contacts tabel.

Mari kita masukkan dua baris lagi ke dalam contacts tabel.

INSERT INTO contacts (first_name, last_name, email)
VALUES('David','Brown','[email protected]'),
      ('Lisa','Smith','[email protected]');Code language: SQL (Structured Query Language) (sql)

Cobalah

Jika Anda meminta data dari contacts tabel berdasarkan email tertentu, SQLite akan menggunakan indeks untuk mencari data. Lihat pernyataan berikut:

SELECT
	first_name,
	last_name,
	email
FROM
	contacts
WHERE
	email = '[email protected]';Code language: SQL (Structured Query Language) (sql)

Cobalah

Untuk memeriksa apakah SQLite menggunakan indeks atau tidak, Anda menggunakan EXPLAIN QUERY PLAN pernyataan sebagai berikut:

EXPLAIN QUERY PLAN 
SELECT
	first_name,
	last_name,
	email
FROM
	contacts
WHERE
	email = '[email protected]';Code language: SQL (Structured Query Language) (sql)

Cobalah

Contoh indeks multikolom SQLite

Jika Anda membuat indeks yang terdiri dari satu kolom, SQLite menggunakan kolom tersebut sebagai kunci pengurutan. Jika Anda membuat indeks yang memiliki banyak kolom, SQLite menggunakan kolom tambahan sebagai yang kedua, ketiga, … sebagai kunci pengurutan.

SQLite mengurutkan data pada indeks multicolumn menurut kolom pertama yang ditentukan dalam CREATE INDEX penyataan. Kemudian, ia mengurutkan nilai duplikat menurut kolom kedua, dan seterusnya.

Oleh karena itu, urutan kolom sangat penting saat Anda membuat indeks multikolom.

Untuk menggunakan indeks multikolom, kueri harus berisi kondisi yang memiliki urutan kolom yang sama seperti yang didefinisikan dalam indeks.

Pernyataan berikut membuat indeks multikolom pada first_name dan last_name kolom contacts tabel:

CREATE INDEX idx_contacts_name 
ON contacts (first_name, last_name);Code language: SQL (Structured Query Language) (sql)

Cobalah

Jika Anda menanyakan contacts tabel dengan salah satu kondisi berikut di WHERE klausa, SQLite akan menggunakan indeks multicolumn untuk mencari data.

1) memfilter data dengan first_name kolom.

WHERE
	first_name = 'John';Code language: SQL (Structured Query Language) (sql)

2) memfilter data dengan first_name dan last_name kolom:

WHERE
	first_name = 'John' AND last_name = 'Doe';Code language: SQL (Structured Query Language) (sql)

Namun, SQLite tidak akan menggunakan indeks multikolom jika Anda menggunakan salah satu kondisi berikut.

1) filter dengan last_name kolom saja.

WHERE
	last_name = 'Doe';Code language: SQL (Structured Query Language) (sql)

2) filter menurut first_name ATAU last_name kolom.

last_name = 'Doe' OR first_name = 'John';Code language: SQL (Structured Query Language) (sql)

SQLite Tampilkan Indeks

Untuk menemukan semua indeks yang terkait dengan tabel, Anda menggunakan perintah berikut:

PRAGMA index_list('table_name');Code language: SQL (Structured Query Language) (sql)

Misalnya, pernyataan ini menunjukkan semua indeks contacts tabel:

PRAGMA index_list('playlist_track');Code language: SQL (Structured Query Language) (sql)

Berikut adalah outputnya:

Untuk mendapatkan informasi tentang kolom dalam indeks, Anda menggunakan perintah berikut:

PRAGMA index_info('idx_contacts_name');Code language: SQL (Structured Query Language) (sql)

Contoh ini mengembalikan daftar kolom indeks idx_contacts_name :

Cara lain untuk mendapatkan semua indeks dari database adalah dengan melakukan query dari sqlite_master tabel:

SELECT
   type, 
   name, 
   tbl_name, 
   sql
FROM
   sqlite_master
WHERE
   type= 'index';Code language: SQL (Structured Query Language) (sql)

SQLite DROP INDEX pernyataan

Untuk menghapus indeks dari database, Anda menggunakan DROP INDEX pernyataan sebagai berikut:

DROP INDEX [IF EXISTS] index_name;Code language: SQL (Structured Query Language) (sql)

Dalam sintaks ini, Anda menentukan nama indeks yang ingin Anda jatuhkan setelah DROP INDEX kata kunci. IF EXISTS opsi menghapus indeks hanya jika ada.

Misalnya, Anda menggunakan pernyataan berikut untuk menghapus idx_contacts_name indeks:

DROP INDEX idx_contacts_name;Code language: SQL (Structured Query Language) (sql)

Cobalah

idx_contacts_name indeks dihapus sepenuhnya dari database.

Dalam tutorial ini, Anda telah mempelajari tentang indeks SQLite dan cara memanfaatkan indeks untuk meningkatkan kinerja kueri atau menerapkan batasan unik.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ekspor Database SQLite Ke File CSV

  2. Cara membuat database SQLite kosong

  3. Secara Otomatis Buka Hasil Kueri SQLite di Excel

  4. java.lang.OutOfMemoryError:[memori habis] saat membaca data dari Sqlite Android

  5. SQLite JSON_SET()