• Tidak ada hasil yang ditemukan

BAB 3 MENDESAIN DAN MEMBANGUN DATABASE

3.4 Indeks

Tabel klasik berfungsi dan dapat dicari oleh MySQL—hingga tumbuh menjadi lebih dari beberapa ratus baris, dan jika ini terjadi maka akses database akan semakin lambat ketika ada baris baru ditambahkan, hal ini karena MySQL harus mencari setiap kueri yang dikeluarkan pada setiap baris. Ini seperti menelusuri setiap buku di perpustakaan yang memiliki sistem indeks kartu atau, database mereka sendiri. Dan hal yang sama berlaku untuk MySQL, dengan mengorbankan sedikit overhead dalam memori dan ruang disk, kita dapat membuat "indeks kartu" untuk tabel yang akan digunakan MySQL dalam melakukan pencarian secepat kilat.

Membuat Indeks

Cara untuk mencapai pencarian cepat adalah dengan menambahkan indeks, baik saat membuat atau setelah selesai membuat tabel. Tapi keputusannya tidak sesederhana itu.

Misalnya, ada berbagai jenis indeks seperti Regular INDEX, PRIMARY KEY, dan FULLTEXT. Kita harus memutuskan kolom mana harus diberi indeks. Indeks bisa menjadi rumit ketika kita menggabungkan terllau banyak kolom dalam satu indeks. Walaupun begitu, masih ada opsi lainnya dalam mengurangi ukuran indeks, dengan cara membatasi jumlah setiap kolom yang beri indeks.

Contoh Menambahkan indeks ke tabel klasik

ALTER TABLE classics ADD INDEX(author(20));

ALTER TABLE classics ADD INDEX(title(20));

ALTER TABLE classics ADD INDEX(category(4));

ALTER TABLE classics ADD INDEX(year);

DESCRIBE classics;

Dua perintah pertama membuat indeks pada kolom penulis dan judul, membatasi setiap indeks hanya untuk 20 karakter pertama. Misalnya, ketika MySQL mengindeks judul berikut:

Belajar PHP Dari Dasar

Ini benar-benar akan menyimpan dalam indeks hanya 20 karakter pertama:

Belajar PHP

Hal ini dilakukan untuk meminimalkan ukuran indeks, dan untuk mengoptimalkan kecepatan akses database. Saya memilih 20 karena kemungkinan cukup untuk memastikan keunikan untuk sebagian besar string yang ada pada kolom. Dengan kolom kategori, saat ini hanya karakter pertama yang diperlukan untuk mengidentifikasi string sebagai unik (F untuk Ilmiah, N untuk non-Ilmiah, dan P untuk praktikum). Kita juga dapat mengindeks ulang kolom ini dimasa depan, saat kita memiliki kumpulan kategori yang lebih lengkap. Disini, saya tidak membatasi indeks kolom tahun, karena ini adalah bilangan bulat, bukan string.

Gambar 3.3 Menambahkan indeks ke tabel klasik.

Menggunakan CREATE INDEX

Alternatif untuk menggunakan ALTER TABLE untuk menambahkan indeks adalah dengan menggunakan perintah CREATE INDEX. Mereka setara, kecuali bahwa CREATE INDEX tidak dapat digunakan untuk membuat PRIMARY KEY (lihat bagian Primary key).

Contoh Kedua perintah ini setara

ALTER TABLE classics ADD INDEX(author(20));

CREATE INDEX author ON classics (author(20));

Menambahkan indeks saat membuat tabel

Anda tidak perlu menunggu hingga penambahan indeks selesai karena ini memakan waktu terlalu lama. Sekarang, mari kita lihat perintah yang membuat tabel klasik dengan indeks yang sudah ada.

Contoh Membuat tabel klasik dengan indeks CREATE TABLE classics (

author VARCHAR(128), title VARCHAR(128), category VARCHAR(16), year SMALLINT,

INDEX(author(20)), INDEX(title(20)), INDEX(category(4)),

INDEX(year)) ENGINE MyISAM;

Primary key

Sampai sini, kita telah membuat tabel klasik dan memastikan bahwa MySQL dapat menemukan tabel tersebut dengan cepat dengan menambahkan indeks. Semua publikasi dalam tabel dapat dicari, tetapi untuk mengaktifkan pengaksesan baris secara instan tidak ada kunci unik tunggal untuk setiap publikasi. Kunci dengan nilai unik untuk setiap baris akan muncul ketika kita mulai menggabungkan data dari tabel yang berbeda.

Bagian Tipe data AUTO_INCREMENT secara singkat memperkenalkan ide primary key saat membuat id kolom penambahan otomatis, yang dapat digunakan sebagai primary key untuk tabel ini. Mari kita lanjutkan dan buat kolom baru untuk kunci ini. Sekarang, mengingat bahwa ISBN memiliki panjang 13 karakter, kita mungkin berpikir bahwa perintah berikut akan melakukan pekerjaan itu:

ALTER TABLE classics ADD isbn CHAR(13) PRIMARY KEY;

Tapi tidak. Jika kita mencobanya, kita akan mendapatkan Error Duplicate entry untuk kunci 1.

Alasannya adalah tabel sudah diisi dengan beberapa data dan perintah ini mencoba menambahkan kolom dengan nilai NULL ke setiap baris yang tidak diperbolehkan karena semua nilai harus unik di kolom mana pun yang memiliki indeks primary key. Jika belum ada data dalam tabel, perintah ini akan berfungsi dengan baik, seperti halnya menambahkan indeks primary key pada pembuatan tabel

Dalam situasi ini, kita dapat membuat kolom baru tanpa indeks, mengisinya dengan data, dan kemudian menambahkan indeks secara retrospektif menggunakan perintah dari contoh dibawah ini. Kita dapat menggunakan kolom tahun untuk mengidentifikasi setiap baris yang akan diperbarui.

Contoh Mengisi kolom isbn dengan data dan menggunakan primary key.

ALTER TABLE classics ADD isbn CHAR(13);

UPDATE classics SET isbn='9781598184891' WHERE year='2020';

UPDATE classics SET isbn='9780582506206' WHERE year='2021';

UPDATE classics SET isbn='9780517123201' WHERE year='2022';

UPDATE classics SET isbn='9780099533474' WHERE year='2022';

UPDATE classics SET isbn='9780192814968' WHERE year='2022';

ALTER TABLE classics ADD PRIMARY KEY(isbn);

DESCRIBE classics;

Setelah kita mengetik perintah ini, hasilnya akan terlihat seperti gambar yang ada dibawah ini.

Perhatikan bahwa kata PRIMARY KEY menggantikan kata kunci INDEX dalam sintaks ALTER TABLE:

Gambar 3.4 Secara retrospektif menambahkan primary key ke tabel klasik

Sekali lagi, ganti nama klasik di baris 1 menjadi sesuatu yang lain jika kita ingin mencoba contoh ini sendiri, lalu hapus tabel pengujian sesudahnya.

Contoh Membuat tabel klasik dengan primary key CREATE TABLE classics (

author VARCHAR(128), title VARCHAR(128), category VARCHAR(16), year SMALLINT,

isbn CHAR(13), INDEX(author(20)), INDEX(title(20)), INDEX(category(4)), INDEX(year),

PRIMARY KEY (isbn)) ENGINE MyISAM;

Membuat indeks FULLTEXT

Tidak seperti indeks biasa, FULLTEXT MySQL memungkinkan pencarian super cepat dari seluruh kolom teks. Ini menyimpan setiap kata di setiap string data dalam indeks khusus yang dapat kita cari menggunakan "bahasa alami", dengan cara yang mirip deng an menggunakan mesin pencari.

Sebenarnya, tidak sepenuhnya benar bahwa MySQL menyimpan semua kata dalam indeks FULLTEXT, karena memiliki daftar bawaan lebih dari 500 kata yang dipilih untuk diabaikan karena kata tersebut sangat umum sehingga tidak terlalu membantu untuk pencarian. Daftar ini, yang disebut stopwords, termasuk, sebagai, adalah, dari, dan seterusnya. Daftar ini membantu MySQL berjalan lebih cepat saat melakukan pencarian

FULLTEXT dan menjaga ukuran database tetap rendah. Lampiran C berisi daftar lengkap stopwords.

Berikut adalah beberapa hal yang harus kita ketahui tentang indeks FULLTEXT:

• Indeks FULLTEXT hanya dapat digunakan dengan tabel MyISAM, jenis yang digunakan oleh mesin penyimpanan default MySQL (MySQL mendukung setidaknya 10 mesin penyimpanan yang berbeda). Untuk mengonversi tabel ke MyISAM, kita dapat menggunakan perintah MySQL ALTER TABLE tablename ENGINE = MyISAM;.

• Indeks FULLTEXT dapat dibuat untuk kolom CHAR, VARCHAR, dan TEXT saja.

• Definisi indeks FULLTEXT dapat diberikan dalam pernyataan CREATE TABLE ketika sebuah tabel dibuat, atau ditambahkan kemudian menggunakan ALTER TABLE (atau CREATE INDEX).

• Untuk kumpulan data yang besar, jauh lebih cepat untuk memuat data kita ke dalam tabel yang tidak memiliki indeks FULLTEXT selanjutnya membuat indeks untuk memuat data ke dalam tabel yang memiliki indeks FULLTEXT.

Untuk membuat indeks FULLTEXT, terapkan ke satu atau lebih catatan seperti contoh yang ada dibawah ini.

Contoh Menambahkan indeks FULLTEXT ke tabel klasik.

ALTER TABLE classics ADD FULLTEXT(author,title);

Sekarang kita dapat melakukan pencarian FULLTEXT dari pasangan kolom ini. Fitur FULLTEXT dapat muncul dengan sendirinya jika menambahkan seluruh teks publikasi ke database (terutama karena publikasi tersebut tidak dilindungi hak cipta) dan dapat ditelusuri sepenuhnya. Jika MySQL berjalan lebih lambat saat mengakses database, bisa jadi indeks bermasalah.

Dalam dokumen Manajemen Database - Universitas STEKOM (Halaman 62-66)