Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kinerja MySQL:Cara Memanfaatkan Pengindeksan Database MySQL

Sepanjang tutorial ini, kita akan membahas beberapa dasar-dasar pengindeksan. Sebagai bagian dari seri MySQL, kami akan memperkenalkan kemampuan pengindeksan MySQL dan perannya dalam mengoptimalkan kinerja database. Liquid Web merekomendasikan untuk berkonsultasi dengan DBA sebelum membuat perubahan apa pun pada aplikasi tingkat produksi Anda.

Apa itu Pengindeksan?

Pengindeksan adalah struktur yang kuat di MySQL yang dapat dimanfaatkan untuk mendapatkan waktu respons tercepat dari kueri umum. Kueri MySQL mencapai efisiensi dengan menghasilkan tabel yang lebih kecil, yang disebut indeks, dari kolom atau kumpulan kolom tertentu. Kolom ini, yang disebut kunci, dapat digunakan untuk menegakkan keunikan. Di bawah ini adalah visualisasi sederhana dari contoh indeks menggunakan dua kolom sebagai kunci.

+------+----------+----------+
| ROW | COLUMN_1 | COLUMN_2 |
+------+----------+----------+
| 1 | data1 | data2 |
+------+----------+----------+
| 2 | data1 | data1 |
+------+----------+----------+
| 3 | data1 | data1 |
+------+----------+----------+
| 4 | data1 | data1 |
+------+----------+----------+
| 5 | data1 | data1 |
+------+----------+----------+

Kueri menggunakan indeks untuk mengidentifikasi dan mengambil data yang ditargetkan, bahkan jika itu adalah kombinasi dari kunci. Tanpa indeks, menjalankan kueri yang sama menghasilkan pemeriksaan setiap baris untuk data yang diperlukan. Pengindeksan menghasilkan pintasan, dengan waktu kueri yang jauh lebih cepat pada tabel yang luas. Analogi buku teks dapat memberikan cara umum lain untuk memvisualisasikan bagaimana indeks berfungsi.

Kapan Mengaktifkan Pengindeksan?

Pengindeksan hanya menguntungkan untuk tabel besar dengan informasi yang diakses secara teratur. Misalnya, untuk melanjutkan analogi buku teks kami, tidak masuk akal untuk mengindeks buku cerita anak-anak dengan hanya selusin halaman. Lebih efisien hanya membaca buku untuk menemukan setiap kemunculan kata "kura-kura" daripada mengatur dan memelihara indeks, kueri untuk indeks tersebut, dan kemudian meninjau setiap halaman yang disediakan. Di dunia komputasi, tugas-tugas tambahan seputar pengindeksan mewakili sumber daya yang terbuang yang akan lebih baik jika tidak dilakukan pengindeksan.

Tanpa indeks, ketika tabel tumbuh menjadi proporsi yang sangat besar, waktu respons menderita dari kueri yang menargetkan tabel tumpul tersebut. Kueri yang tidak efisien terwujud dalam latensi dalam kinerja aplikasi atau situs web. Kami biasanya mengidentifikasi latensi ini dengan menggunakan fitur log kueri lambat MySQL. Anda dapat menemukan detail lebih lanjut tentang menggunakan fitur log kueri lambat di artikel pertama dalam seri ini:Kinerja MySQL:Mengidentifikasi Kueri Panjang.
Setelah tabel kolosal mencapai titik kritisnya, tabel tersebut mencapai potensi waktu henti untuk aplikasi dan situs web . Melakukan evaluasi rutin untuk mengembangkan basis data akan menghasilkan kinerja basis data yang optimal dan menghindari interupsi bawaan kueri yang panjang.

Pro vs. Kontra Pengindeksan MySQL

Ada keuntungan dan kerugian menggunakan pengindeksan MySQL, dan kami akan membahas pro dan kontra yang signifikan untuk pertimbangan Anda. Aspek-aspek ini akan memandu Anda untuk memutuskan apakah pengindeksan merupakan pilihan yang tepat untuk situasi Anda.

Informasi Apa yang Diindeks Seseorang?

Memilih apa yang akan diindeks mungkin merupakan bagian yang paling menantang untuk mengindeks database Anda. Menentukan apa yang cukup penting untuk diindeks dan apa yang cukup jinak untuk tidak diindeks. Secara umum, pengindeksan berfungsi paling baik pada kolom-kolom yang merupakan subjek dari klausa WHERE dalam kueri Anda yang biasa dieksekusi. Perhatikan tabel sederhana berikut ini:

ID, TITLE, LAST_NAME, FIRST_NAME, MAIDEN_NAME, DOB, GENDER, AGE, DESCRIPTION, HISTORY, ETC...

Jika kueri Anda mengandalkan pengujian klausa WHERE menggunakan LAST_NAME dan FIRST_NAME, maka pengindeksan oleh dua kolom ini akan meningkatkan waktu respons kueri secara signifikan. Sebagai alternatif, jika kueri Anda mengandalkan pencarian ID sederhana, pengindeksan menurut ID akan menjadi pilihan yang lebih baik.

Contoh-contoh ini hanyalah contoh yang belum sempurna, dan ada beberapa jenis struktur pengindeksan yang ada di dalam MySQL. Halaman MySQL berikut membahas jenis indeks ini secara lebih rinci, dan bacaan yang direkomendasikan untuk siapa saja yang mempertimbangkan pengindeksan:Bagaimana MySQL Menggunakan Indeks

Apa yang dimaksud dengan Indeks Unik?

Poin lain yang perlu dipertimbangkan saat mengevaluasi kolom mana yang akan dijadikan sebagai kunci dalam indeks Anda adalah apakah akan menggunakan batasan UNIK. Menyetel batasan UNIQUE akan menerapkan keunikan berdasarkan kunci pengindeksan yang dikonfigurasi. Seperti halnya kunci apa pun, ini bisa berupa satu kolom atau gabungan dari beberapa kolom. Fungsi batasan ini memastikan bahwa tidak ada entri duplikat dalam tabel berdasarkan kunci yang dikonfigurasi.

Apa yang dimaksud dengan Indeks Kunci Utama?

Seperti yang biasa dipanggil sebagai batasan UNIK, KUNCI UTAMA digunakan untuk mengoptimalkan indeks. Batasan ini memastikan bahwa KUNCI UTAMA yang ditunjuk tidak boleh bernilai nol. Akibatnya, peningkatan kinerja terjadi saat menjalankan mesin penyimpanan InnoDB untuk tabel yang dimaksud. Peningkatan ini disebabkan oleh cara InnoDB menyimpan data secara fisik, menempatkan baris bernilai nol di kunci di luar urutan yang berdekatan dengan baris yang memiliki nilai. Mengaktifkan batasan ini memastikan baris tabel disimpan dalam urutan yang berdekatan untuk respons yang lebih cepat.

Mengelola Indeks

Sekarang kita akan membahas beberapa dasar-dasar memanipulasi indeks menggunakan sintaks MySQL. Dalam contoh, kami akan menyertakan pembuatan, penghapusan, dan daftar indeks. Perlu diingat, contoh ini memiliki entri placeholder untuk kata kunci tertentu. Kata kunci ini pada dasarnya sudah cukup jelas untuk dibaca dengan mudah, dan di bawah ini adalah garis besarnya.

Mencantumkan/Menampilkan Indeks

Tabel dapat memiliki beberapa indeks. Mengelola indeks pasti akan membutuhkan kemampuan untuk membuat daftar indeks yang ada di atas meja. Sintaks untuk melihat indeks di bawah ini.

SHOW INDEX FROM tableName;

Membuat Indeks

Pembuatan indeks memiliki sintaks yang sederhana. Kesulitannya adalah dalam menentukan kolom apa yang perlu diindeks dan apakah perlu menegakkan keunikan. Di bawah ini kami akan mengilustrasikan cara membuat indeks dengan dan tanpa KUNCI UTAMA dan batasan UNIK.

Seperti disebutkan sebelumnya, tabel dapat memiliki beberapa indeks. Pengindeksan berganda berguna untuk membuat indeks yang disesuaikan dengan kueri yang diperlukan oleh aplikasi atau situs web Anda. Pengaturan default memungkinkan hingga 16 indeks per tabel, tingkatkan jumlah ini tetapi umumnya lebih dari yang diperlukan. Indeks dapat dibuat selama pembuatan tabel atau ditambahkan ke tabel sebagai indeks tambahan nanti. Kami akan membahas kedua metode di bawah ini.

Contoh:Buat Tabel dengan Indeks Standar

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
INDEX ( ID )
);

Contoh:Buat Tabel dengan Indeks Unik &Kunci Utama

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
PRIMARY KEY (ID),
UNIQUE INDEX ( ID )
);

Contoh:Tambahkan Indeks ke Tabel yang Ada

CREATE INDEX indexName ON tableName (ID, LName, FName, LOC);

Contoh:Tambahkan Indeks ke Tabel yang Ada dengan Kunci Utama

CREATE UNIQUE INDEX indexName ON tableName (ID, LName, FName, LOC);

Menghapus Indeks

Saat mengelola indeks, Anda mungkin perlu menghapus beberapa. Menghapus indeks juga merupakan proses yang sangat sederhana, lihat contoh di bawah ini:

DROP INDEX indexName ON tableName;

Ada banyak cara untuk mengoptimalkan database Anda untuk efisiensi yang sebenarnya. Jika Anda ingin mempelajari lebih lanjut atau mengonversi jenis mesin telusur yang tersedia di MySQL, bacalah tutorial MyISAM vs. InnoDB kami. Atau jika Anda membutuhkan database yang berfungsi tinggi, lihat halaman produk MySQL kami untuk melihat opsi yang berbeda.

Navigasi Seri<>

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara cepat mengganti nama database MySQL (mengubah nama skema)?

  2. MySql jumlah elemen kolom

  3. Apa Setara MySQL dari STUFF() di SQL Server?

  4. CodeIgniter:Tidak dapat terhubung ke server database Anda menggunakan pengaturan yang disediakan Pesan Kesalahan

  5. MySQL - Bagaimana cara melepaskan kolom ke baris?