Singkatnya indeks database adalah sebuah struktur data tambahan yang memungkinkan untuk pengambilan lebih cepat dari data yang disimpan dalam database. Misalnya ketika kita mencari sebuah istilah di buku apakah kita mencarinya diseluruh halaman di buku tersebut? tidak kita akan mencarinya di index terlebih dahulu, lalu baru indelah yang menunjukkan istilah tersebut ada dihalaman berapa. Hal ini sangat membantu pencarian.
Konsep Table
Tabel Database, setidaknya secara konseptual, terlihat seperti ini:
id age last_name hometown -- -- -- -- 1 10 Johnson San Francisco, CA 2 27 Smith San Joe, CA 3 15 Rose Palo Alto, CA 4 64 Farmer Mill Valley, CA 5 55 Pauling San Francisco, CA 6 17 Smith Oakland, CA ... ... ... ... 100 49 Meyer Berkeley, CA 101 30 Wayne Monterey, CA 102 18 Schwartz San Francisco, CA 104 6 Johnson San Francisco, CA ... ... ... ... 10000 41 Fetterman Mountain View, CA 10001 25 Breyer Redwood City, CA
Artinya, tabel adalah kumpulan tupple. Jika kita memiliki tabel seperti ini, bagaimana kita mendapatkan semua orang yang mempunyai nama belakang ‘Smith? ”
Tampa index maka ini yang akan terjadi:
results = [] for row in rows: if row[2] == ‘Smith’: results.append[row]
Untuk mencari record yang sesuai kita harus melakukan pemeriksaan kondisi (di sini, memiliki nama belakang ‘Smith’) untuk setiap baris. jika jumlah barisnya 10 masih belom kerasa, jika sudah jutaan… bisa satu jam untuk sebuah query
Bagaimana kita bisa membuatnya lebih cepat?
Konsep Index
Jawabannya adalah memberikan index. Ada beberapa tipe index diantaranya:
Hash Index
Ambil contoh yang sama dari atas, mencari semua orang dengan nama terakhir ‘Smith’. Jika kita menggunakan solusi hash index maka akan dibuat sebuah hash table. Jika anda bukan orang computer science, hash ini dapat diartikan sebuah fungsi matematika yang memetakan data ke kunci-kunci hash (lihat gambar dibawah). Kunci-kunci hash akan dibuuat berdasarkan field last_name dan nilai-nilai akan berisi pointer ke baris database.
Ilustrasi Hash Table
Jenis indeks “hash” didukung oleh kebanyakan database tapi mereka umumnya bukan tipe index default.. Mengapa?
Karena jenis index hash lemah terhadap kondisi ketidak setaraan.. (cari orang dengan umur > 40) dia hanya bekerja dengan sangat bagus intuk menangani persamaan (cari orang dengan umur =40)
Tree Index
Struktur data yang paling sering digunakan untuk indeks database adalah B-tree. B-tree adalah sejenis tree yang dapat melakukanself-balancing. Contoh b-tree

Ilustrasi index b-tree
Salah satu keuntungan b-tree dibandingkan hash adalah dia sudah include dengan algoritma seleksi, insertion, deletion dan update dengan memperhatikan worst case. Jadi data yang dsimpan tida dalam bentuk terurut telainkan bentuk pohon sehingga memudah kan pencarian data yang bersifat ketidaksetaraan.
wah jika index maka banyakin aja indexnya di semua field?
Konsekwensi Menggunakan Index
Pengguaan Indeks bukan tampa akibat. Jika anda mendapatkan kecepatan pada pencarian maka anda akan kehilangan (sedikit) kecepatan pada insert dan delete karena ada proses balancing tree. Jika tabel Anda sering melakukan update ada kemungkinan bahwa memiliki indeks akan menyebabkan kinerja keseluruhan database ada menjadi menurun.
Selain itu ada juga space anda akan banyak digunakan, indeks akan menggunaka space memori atau hardisk. Semakin besar index, semakin besar memory yang dipakai maka semakin menurun performa server anda.
MyIsam Vs InnoDb
Pemilihan tipe engine table berpengaruh pada performa. MySQL memiliki dua mesin storange utama: MyISAM dan InnoDB. Masing-masing memiliki karakteristik performa dan pertimbangan khusus. Simplenya MyISAM baik untuk membaca-data dan InnoDB baik untuk menulis data (write), meskipun ada kasus dimana kebalikannya yang benar. Perbedaan utama adalah bagaimana keduanya berbeda dalam penanganan fungsi COUNT.
Berikut ringkasan perbedaan fitur dan kinerja:
- InnoDB lebih kompleks, sementara MyISAM lebih sederhana.
- InnoDB semakin ketat dalam integritas data sementara MyISAM longgar.
- InnoDB menerapkan tingkat baris kunci untuk memasukkan dan meng-update baris sementara MyISAM menerapkan tingkat kunci tabel.
- InnoDB memiliki transaksi sementara MyISAM tidak.
- InnoDB memiliki kunci asing dan hubungan contraints sementara MyISAM tidak.
- InnoDB memiliki crash pemulihan lebih baik sementara MyISAM yang miskin memulihkan integritas data pada sistem crash.
- MyISAM memiliki indeks pencarian teks penuh (full text search) sementara InnoDB tidak.
Keuntungan dari InnoDB
- InnoDB harus digunakan di mana integritas data lebih prioritas.
- Lebih cepat dalam menulis-intensif (penyisipan, update) tabel karena menggunakan tingkat penguncian baris dan hanya tahan perubahan pada baris yang sama yang sedang dimasukkan atau diperbaharui.
Kekurangan dari InnoDB
- Karena InnoDB harus menjaga hubungan yang berbeda antara tabel, database administrator dan pencipta skema harus mengambil lebih banyak waktu dalam mendesain model data yang lebih kompleks daripada MyISAM.
- Mengkonsumsi sumber daya sistem yang lebih seperti RAM. Direkomendasikan bahwa mesin InnoDB dimatikan jika tidak perlu substansial untuk itu setelah instalasi MySQL.
- Tidak memiliki pengindeksan full teks .
Keuntungan MyISAM
- Sederhana untuk merancang dan membuat, sehingga lebih baik untuk pemula. Jangan khawatir tentang hubungan luar negeri antara tabel.
- Lebih cepat dari InnoDB pada keseluruhan sebagai akibat dari struktur sederhana sehingga jauh lebih sedikit biaya sumber daya server.
- Pengindeksan teks lengkap.
- Sangat baik untuk membaca-intensif (select) tabel.
Kekurangan dari MyISAM
- Tidak ada integritas data (misalnya kendala hubungan), yang kemudian datang tanggung jawab dan overhead dari para administrator database dan pengembang aplikasi.
- Tidak mendukung transaksi yang penting dalam aplikasi perbankan.
- Lebih lambat dari InnoDB untuk tabel yang sering dimasukkan atau diperbaharui, karena seluruh tabel terkunci untuk memasukkan atau memperbarui.
Perbandingan MyIsam dan InnoDb
|
MyISAM |
InnoDB |
|---|---|
| Files storage:
FRM: table definition, MYD: Actual Data MYI: Index File |
FRM: table definition .ibd file (Menggunakan konsep table space) atau single huge .ibdataX |
| No transation, Foreign key |
ACID Transactions, Foreign key, Rollback |
| Low disk dan memory utilisation |
Relatively high storage requirements (Hampir 3x lebih besar) |
| Non clustered indexing |
Clustered indexing for Primary key |
| Table level locking |
Row level locking |
| Fulltext Indexes, Merge tables, Compressed tables. |
Not available |
| GIS, RTREE indexes |
Not available |
| Not avalable |
HASH lookups |
thanx master, baca2 dlu ah
makasih,,sangat membantu untuk tugas kuliah :)))
oh gitu ya gan...!! udah aku coba memang berbeda masing type table tersebut..!!? thanks ya gan tas infox
uow.. bru tw klo bs kyk gtu mysql
trus cara pengcodingan na gmn ni kk
pengen bljr jg ni..
klo my sql udah support buat OOP???
ok thx mas, kebetulan lagi belajar indexing nih...
saya mo tanya mas, apa bedanya kalo kita pake 'USING BTREE' ma yang nggak pake discript-nya,,? kalo saya coba sih, hasilnya nggak perbedaan, baek yang pake tambahan 'USING BTREE' ato yang nggak..
Mas, boleh gk saya copy ke web saya? saya pasti sertakan koq sumber aslinya