Cara bermain Lemari Indeks
- Baca instruksi level. Arena menampilkan jumlah laci yang dibuka, dibandingkan dengan membaca semua laci dan dengan target level.
- Tulis
CREATE INDEX nama ON pasien (kolom);di atas query, laluSELECTdi akhir. Pernyataan dipisah dengan;. - Arena menunjukkan rencana yang dipilih: indeks mana yang dipakai, atau kenapa sebuah indeks tidak terpakai. Grid laci menandai laci yang dibuka dan laci yang berisi hasil.
- Tekan Cek jawaban atau Ctrl + Enter. Level lolos kalau hasil query-nya benar dan laci yang dibuka tidak melebihi target.
- Kalau buntu, buka Petunjuk. Level yang sudah selesai tetap tercentang di browser yang sama.
Yang kamu pelajari
- Level 1
CREATE INDEX
Indeks menyimpan nilai satu kolom dalam urutan, beserta letak barisnya.
- Level 2
Indeks hanya untuk kolom di WHERE
Indeks kolom lain tidak membantu pencarian ini.
- Level 3
Rentang lewat indeks
>=,<, danBETWEENjuga bisa dicari lewat indeks. - Level 4
LIKE diawali %
LIKE 'Sari%'memakai indeks,LIKE '%Sari%'tidak. - Level 5
Fungsi di kolom
LOWER(kota) = 'medan'tidak bisa memakai indekskota. - Level 6
Aturan kolom paling kiri
Indeks
(kota, lahir)tidak bisa dipakai untuk mencarilahirsaja. - Level 7
Indeks gabungan
Satu indeks dua kolom menyaring kedua syarat sekaligus.
- Level 8
Sama dengan dulu, rentang belakangan
Sesudah kolom rentang, kolom berikutnya di indeks tidak terpakai.
- Level 9
Selektivitas
Indeks di kolom yang nilainya dimiliki hampir semua baris tidak menghemat apa pun.
Indeks gabungan dibaca dari kiri
Indeks (kota, lahir) seperti buku telepon yang urut menurut kota, lalu tahun lahir di dalam tiap kota. Mencari Medan kelahiran 1990 cepat: buka bagian Medan, lalu langsung ke 1990. Mencari semua kelahiran 1990 tanpa kota tidak terbantu, karena 1990 tersebar di setiap kota.
Rentang juga memutus urutan. Dengan indeks (lahir, kota), syarat lahir >= 2000 menghasilkan potongan berisi banyak tahun, dan di potongan itu kota tidak lagi urut. Karena itu kolom yang dicari dengan = ditaruh di depan, kolom rentang di belakang: (kota, lahir).
Tanya jawab
Apakah harus daftar akun untuk bermain?
Tidak. Semua level bisa dimainkan tanpa akun. Kemajuanmu disimpan di browser yang kamu pakai, jadi akan hilang kalau data browser dihapus.
Apakah jumlah laci ini sama dengan waktu di database sungguhan?
Tidak persis. Game ini memakai model biaya tetap: membaca tanpa indeks membuka semua laci, lewat indeks membuka 3 laci kartu indeks lalu hanya laci yang cocok. Database sungguhan menghitung halaman disk, cache, dan statistik data, dan bisa memilih membaca semua baris walau indeksnya ada. Polanya sama: indeks berguna kalau menyaring sedikit baris.
Kenapa tidak membuat indeks di semua kolom saja?
Setiap indeks ikut diperbarui saat data ditambah, diubah, atau dihapus, dan memakan ruang penyimpanan. Karena itu tiap level membatasi jumlah indeks. Buat indeks untuk pencarian yang sering dan selektif.
Bagaimana kalau pencarian memang harus pakai LOWER atau fungsi lain?
PostgreSQL dan SQLite mendukung indeks ekspresi, misalnya CREATE INDEX ON pasien (LOWER(kota)), dan MySQL 8 punya functional index. Game ini belum mendukungnya, jadi solusinya menulis ulang kondisi supaya membandingkan kolom apa adanya.
Apakah primary key otomatis punya indeks?
Ya, di hampir semua database. Di game ini kolom id sengaja tidak dianggap berindeks supaya fokus pada indeks yang kamu buat sendiri.