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

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

 

6 Comments

 

  1. November 26, 2010  9:59 am by yazid Reply

    thanx master, baca2 dlu ah

  2. December 17, 2010  11:59 pm by niken Reply

    makasih,,sangat membantu untuk tugas kuliah :)))

  3. January 21, 2011  1:18 am by berhanz Reply

    oh gitu ya gan...!! udah aku coba memang berbeda masing type table tersebut..!!? thanks ya gan tas infox

  4. February 6, 2011  2:12 pm by Andyra Reply

    uow.. bru tw klo bs kyk gtu mysql
    trus cara pengcodingan na gmn ni kk
    pengen bljr jg ni..

  5. February 16, 2011  4:24 pm by RAHMAT Reply

    klo my sql udah support buat OOP???

  6. April 13, 2011  11:34 am by otong Reply

    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..

  7. February 7, 2012  12:25 pm by Asep Reply

    Mas, boleh gk saya copy ke web saya? saya pasti sertakan koq sumber aslinya

Leave a reply

 

Your email address will not be published.