MYSQL Indexing
PHP, MySQL, dan Apache banyak di gunakan oleh Webdeveloper sebagai Engine untuk menjalankan sebuah website.
Karena itu penting untuk mengetahui bagaimana membuat Database dengan baik dan benar.
Pada kesempatan kali ini, ingin dijelaskan apa itu indexing.
Indexing pada MySQL dapat membantu pempercepat waktu proses query "SELECT ... WHERE". Pencarian pada field yang sudah di index akan jauh lebih cepat dibandingkan pencarian pada field yang tidak di index.
Contoh:
CREATE TABLE IF NOT EXISTS `test_indexing` (
`kolom_1` varchar(20) NOT NULL,
`kolom_2` varchar(20) NOT NULL,
`kolom_3` varchar(20) NOT NULL,
INDEX `index_satu_kolom_aja` (`kolom_1`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Dengan struktur table seperti di atas, maka "SELECT" query yang melibatkan "WHERE" untuk kolom_1 akan lebih cepat 100X pada pencarian dengan jumlah row lebih dari 1000. Source: http://dev.mysql.com.
Contoh query yang menggunakan index 'index_satu_kolom_aja':#Query Tipe 1
SELECT * FROM `test_indexing` WHERE `kolom_1` = 'drupal';
#Query Tipe 2
SELECT * FROM `test_indexing` WHERE `kolom_1` = 'drupal' or `kolom_1` = 'wordpress';
#Query Tipe 3
SELECT * FROM `test_indexing` WHERE `kolom_1` > 'd';
Bagaimanakah "SELECT" melibatkan lebih dari satu field ?
Untuk membantu memahaminya lebih dalam, dibuat satu contoh tabel baruCREATE TABLE IF NOT EXISTS `test_indexing` (
`kolom_1` varchar(20) NOT NULL,
`kolom_2` varchar(20) NOT NULL,
`kolom_3` varchar(20) NOT NULL,
INDEX `index_banyak_kolom` (`kolom_1`, `kolom_2`, `kolom_3`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Dengan struktur table seperti ini, "Query" akan menggunakan index jika melibatkan pencarian terhadap kolom yang paling kiri. Misalkan pencarian melibatkan `kolom_1` (kolom_1) atau melibatkan `kolom_1` dan `kolom_2` (kolom_1, kolom_2) atau melibatkan ketiga kolom (kolom_1, kolom_2, kolom_3)
1. Ada beberapa tipe query yang memfungsikan index table
#pencarian melibatkan kolom_1 SELECT * FROM `test_indexing` WHERE `kolom_1` = 'drupal'; #pencarian melibatkan kolom_1 dan kolom_2 SELECT * FROM `test_indexing` WHERE `kolom_1` = 'drupal' or `kolom_2`= 'wordpress'; #pencarian melibatkan ketiga kolom SELECT * FROM `test_indexing` WHERE `kolom_1` = 'drupal' or `kolom_2`= 'wordpress' or `kolom_3`= 'joomla'; #pencarian melibatkan ketiga kolom SELECT * FROM `test_indexing` WHERE `kolom_1` = 'drupal' or (`kolom_2`= 'wordpress' and `kolom_3`= 'joomla'); SELECT * FROM `test_indexing` WHERE `kolom_1` like 'drup%l'; SELECT * FROM `test_indexing` WHERE `kolom_1` like 'drupal%';
2. Perhatikan, query query berikut tidak melibatkan index table. Dengan kata lain, query tersebut akan memakan proses yang lebih lama.
#karena tidak melibatkan kolom_1 SELECT * FROM `test_indexing` WHERE `kolom_2` = 'wordpress'; #karena tidak melibatkan kolom_2 SELECT * FROM `test_indexing` WHERE `kolom_1` = 'drupal' or `kolom_3` = 'joomla';
#karena wildcard didepan menjadikan string tidak ada ketetapan. SELECT * FROM `test_indexing` WHERE `kolom_1` like '%drupal'
- X-C0d3C's blog
- Add new comment
- 1129 reads
Comments
Pingback