Apa itu Indeks?
Indeks dalam MySQL menyusun data secara berurutan yang teratur. Mereka dibuat pada lajur yang akan digunakan untuk menyaring data. Fikirkan indeks sebagai senarai yang disusun mengikut abjad. Lebih mudah mencari nama yang telah disusun mengikut abjad daripada nama yang tidak disusun.
Menggunakan indeks pada jadual yang sering dikemas kini boleh mengakibatkan prestasi yang buruk. Ini kerana MySQL membuat blok indeks baru setiap kali data ditambahkan atau dikemas kini dalam jadual. Secara amnya, indeks harus digunakan pada tabel yang datanya tidak sering berubah tetapi banyak digunakan dalam pertanyaan carian tertentu.
Apa yang menggunakan Indeks?
Tidak ada yang suka sistem perlahan. Prestasi sistem yang tinggi sangat penting di hampir semua sistem pangkalan data. Sebilangan besar perniagaan banyak melabur dalam perkakasan supaya pengambilan dan manipulasi data dapat lebih cepat. Tetapi ada had pelaburan perkakasan yang dapat dilakukan oleh perniagaan. Mengoptimumkan pangkalan data anda adalah penyelesaian yang lebih murah dan lebih baik.
Kelambatan dalam masa tindak balas biasanya disebabkan rekod disimpan secara rawak dalam jadual pangkalan data. Pertanyaan carian harus melengkapkan seluruh rekod yang disimpan secara rawak satu demi satu untuk mencari data yang diinginkan. Ini menghasilkan pangkalan data berprestasi rendah ketika mengambil data dari jadual besar. Oleh itu, Indeks digunakan untuk menyusun data untuk memudahkan pencarian.
Sintaks: Buat Indeks
Indeks dapat ditentukan dengan 2 cara
- Pada masa pembuatan jadual
- Setelah jadual dibuat
Untuk myflixdb kami mengharapkan banyak carian ke pangkalan data dengan nama penuh.
Kami akan menambahkan lajur "nama penuh" ke Indeks dalam jadual baru "member_indexed".
Skrip yang ditunjukkan di bawah ini membantu kita untuk mencapainya.
CREATE TABLE `members_indexed` (`membership_number` int(11) NOT NULL AUTO_INCREMENT,`full_names` varchar(150) DEFAULT NULL,`gender` varchar(6) DEFAULT NULL,`date_of_birth` date DEFAULT NULL,`physical_address` varchar(255) DEFAULT NULL,`postal_address` varchar(255) DEFAULT NULL,`contact_number` varchar(75) DEFAULT NULL,`email` varchar(255) DEFAULT NULL,PRIMARY KEY (`membership_number`),INDEX(full_names)) ENGINE=InnoDB;
Jalankan skrip SQL di atas di meja kerja MySQL terhadap "myflixdb".
Menyegarkan myflixdb menunjukkan jadual yang baru dibuat bernama member_indexed.
Jadual "note" member_indexed mempunyai "nama_ penuh" di simpul indeks.
Apabila pangkalan anggota berkembang dan bilangan rekod bertambah, pertanyaan carian pada jadual member_indexed yang menggunakan klausa WHERE dan ORDER BY akan jauh lebih pantas berbanding dengan yang dilakukan jadual ahli tanpa indeks ditentukan.
Tambah sintaks asas indeks
Contoh di atas membuat indeks ketika menentukan jadual pangkalan data. Katakan kita sudah mempunyai jadual yang ditentukan dan pertanyaan carian di dalamnya sangat perlahan. Mereka mengambil masa terlalu lama untuk mengembalikan hasilnya. Setelah menyiasat masalah tersebut, kami dapati bahawa kami dapat meningkatkan prestasi sistem dengan membuat INDEX pada lajur yang paling sering digunakan dalam klausa WHERE.
Kita boleh menggunakan pertanyaan berikut untuk menambahkan indeks
CREATE INDEX id_index ON table_name(column_name);
Anggaplah bahawa pertanyaan carian di meja filem sangat perlahan dan kami ingin menggunakan indeks pada "tajuk filem" untuk mempercepat pertanyaan, kami dapat menggunakan skrip berikut untuk mencapainya.
CREATE INDEX `title_index` ON `movies`(`title`);
Melaksanakan pertanyaan di atas membuat indeks pada bidang tajuk dalam jadual filem.
Ini bermaksud semua pertanyaan carian di meja filem menggunakan "tajuk" akan lebih cepat.
Pertanyaan carian di bidang lain dalam jadual filem akan tetap lebih perlahan dibandingkan dengan yang berdasarkan bidang yang diindeks.
Catatan: Anda boleh membuat indeks pada beberapa lajur jika perlu bergantung pada bidang yang ingin anda gunakan untuk enjin carian pangkalan data anda.
Sekiranya anda ingin melihat indeks yang ditentukan pada jadual tertentu, anda boleh menggunakan skrip berikut untuk melakukannya.
SHOW INDEXES FROM table_name;
Sekarang mari kita lihat semua indeks yang ditentukan pada jadual filem di myflixdb.
SHOW INDEXES FROM `movies`;
Melaksanakan skrip di atas di meja kerja MySQL terhadap myflixdb memberi kita hasil pada indeks yang dibuat.
Catatan: Kekunci utama dan asing di atas meja telah diindeks oleh MySQL. Setiap indeks mempunyai nama tersendiri dan lajur yang ditentukan juga ditunjukkan.
Sintaks: Indeks penurunan
Perintah drop digunakan untuk membuang indeks yang sudah ditentukan di atas meja.
Mungkin ada kalanya anda telah menentukan indeks di atas meja yang sering dikemas kini. Anda mungkin mahu membuang indeks pada jadual seperti itu untuk meningkatkan prestasi pertanyaan UPDATE dan INSERT. Sintaks asas yang digunakan untuk menjatuhkan indeks pada jadual adalah seperti berikut.
DROP INDEX `index_id` ON `table_name`;
Sekarang mari kita lihat contoh praktikal.
DROP INDEX ` full_names` ON `members_indexed`;
Melaksanakan perintah di atas menjatuhkan indeks dengan id `full_names` dari jadual member_indexed.
Ringkasan
- Indeks sangat kuat ketika datang untuk meningkatkan prestasi pertanyaan carian MySQL.
- Indeks dapat didefinisikan ketika membuat jadual atau ditambahkan kemudian setelah jadual sudah dibuat.
- Anda boleh menentukan indeks pada lebih daripada satu lajur di atas meja.
- SHOW INDEX FROM table_name digunakan untuk memaparkan indeks yang ditentukan pada jadual.
- Perintah DROP digunakan untuk membuang indeks yang ditentukan pada jadual yang diberikan.