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

Kinerja MySQL:Indeks MySQL/MariaDB

Data dalam database MySQL/MariaDB disimpan dalam tabel. Cara berpikir sederhana tentang indeks adalah dengan membayangkan spreadsheet yang luas. Jenis sistem ini tidak selalu kondusif untuk pencarian cepat; di situlah indeks menjadi penting. Jika tidak ada indeks, maka mesin database harus mulai dari baris pertama dan menelusuri semua baris untuk mencari nilai yang sesuai. Jika ini adalah tabel kecil, maka itu bukan masalah besar, tetapi dalam tabel dan aplikasi yang lebih besar di mana bisa ada tabel dengan jutaan bahkan miliaran baris, itu menjadi masalah. Seperti yang dapat Anda bayangkan, menelusuri baris tersebut satu per satu akan memakan waktu, bahkan pada perangkat keras terbaru. Solusinya adalah membuat INDEX (atau lebih dari satu) untuk data Anda.

Apa Itu Indeks?

Indeks adalah tabel pencarian terorganisir yang berisi pointer ke tempat data dapat diambil dalam database. Konsep ini mirip dengan indeks buku. Dalam sebuah buku, indeks mencantumkan nomor halaman di mana berbagai topik berada. Dalam database, indeks menyimpan pointer yang berada dalam urutan logis dan diurutkan, memungkinkan pencarian cepat dalam database. Bayangkan sebuah buku tanpa indeks. Jika Anda ingin mencari informasi tentang topik tertentu, Anda harus mulai dari awal dan membolak-balik halaman sampai Anda menemukan informasi yang Anda cari. Indeks buku memecahkan masalah ini dengan memberi tahu Anda secara tepat halaman mana informasi yang Anda cari. Ini pada dasarnya bagaimana indeks MySQL bekerja.

Kapan MySQL Menggunakan Indeks?

Setiap kali server database harus mencari informasi, itu akan menggunakan indeks untuk mempercepat proses. Contohnya termasuk klausa WHERE, JOIN ON, MIN/MAX, dan ORDER BY/GROUP BY. Jika kueri Anda akan sering mencari atau mencocokkan kolom dalam salah satu situasi ini, Anda harus mempertimbangkan untuk membuat indeks.

Apakah Indeks Meningkatkan Kinerja Basis Data?

Sebagian besar waktu, jawaban singkatnya adalah ya. Untuk membaca dan menelusuri data, indeks benar-benar meningkatkan kinerja. Tidak melakukan pemindaian tabel lengkap akan meningkatkan hampir semua kueri SELECT. Ini memang datang dengan harga kecil. Untuk kolom yang sering dimanipulasi, ada biaya untuk setiap perubahan. Ini dapat menghambat INSERT dan UPDATE pada database.

Jenis Indeks MySQL Umum

Ada tiga jenis umum indeks MySQL:

  • Kunci Utama
  • Indeks
  • Unik

KUNCI UTAMA

Kunci utama memberi tahu server basis data yang merupakan kolom paling penting dalam tabel. Biasanya, ini digunakan untuk kolom id auto_increment. Misalnya, jika Anda memiliki tabel yang berisi informasi karyawan, Anda akan menginginkan kunci utama pada kolom “EMPLOYEE_ID”. Di tabel lain, yaitu tabel gaji, Anda cukup merujuk ke EMPLOYEE_ID alih-alih semua data karyawan.

INDEX

Sebuah INDEX standar digunakan untuk memberitahu server database bahwa satu atau lebih kolom dalam tabel akan banyak dicari, dan dengan demikian indeks harus dibuat pada kolom tersebut. Ini dapat dibangun selama pembuatan tabel atau jika Anda membutuhkan indeks pada kolom nanti, itu dapat ditambahkan kemudian.

UNIK

Indeks UNIK sedikit berbeda karena memberikan batasan khusus pada apa yang dapat ditulis ke dalam tabel. Jika Anda mencoba menyisipkan baris yang berisi nilai yang sudah disertakan dalam data, maka INSERT akan menghasilkan kesalahan. Ini memungkinkan pencarian cepat serta beberapa integritas data.

Cara Membuat Indeks

Ada beberapa cara untuk membuat indeks pada kolom. Anda dapat menyiapkan indeks saat Anda CREATE TABLE, atau setelahnya dengan pernyataan ALTER TABLE atau CREATE INDEX.

Membuat Indeks PRIMARY KEY

Cara termudah untuk membuat indeks PRIMARY KEY adalah dengan melakukannya saat Anda membuat tabel. Kami akan menggunakan contoh tabel karyawan untuk tutorial ini. Tabel akan memiliki tiga kolom:ID, FIRSTNAME, dan LASTNAME. Kreasinya mungkin terlihat seperti ini:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32)
);

Pernyataan ini akan membuat tabel tanpa indeks. Kita dapat menambahkan kunci utama dengan pernyataan seperti ini:

ALTER TABLE EMPLOYEE
  ADD CONSTRAINT PRIMARY KEY (ID);

Ini memberitahu MySQL bahwa kita memiliki kunci utama pada kolom ID.

Cara yang lebih mudah untuk melakukan ini adalah selama pembuatan tabel. Mulai dari awal, kita akan membuat ulang tabel dan menambahkan kunci utama dalam satu pernyataan.

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID)
);

Pernyataan tunggal ini melakukan tugas yang sama seperti dua pernyataan pertama di atas. Kunci utama dapat berisi lebih dari satu kolom, tetapi semua kolom harus unik. Kunci utama dapat digunakan untuk mengidentifikasi setiap baris dalam tabel.

Membuat Indeks Menggunakan CREATE INDEX

Dengan menggunakan tabel contoh di atas, bayangkan perusahaan memiliki ribuan karyawan, dan Anda ingin dapat mencari karyawan dengan cepat berdasarkan nama belakang. Dengan kunci utama, hanya ada satu entri. Anda tidak dapat memiliki beberapa orang yang memiliki ID karyawan yang sama. Dengan nama belakang, cukup umum untuk memiliki banyak orang yang berbagi nama itu. Sekali lagi, ada beberapa cara untuk melakukan ini. Menggunakan tabel di atas:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID)
);

Kita dapat menambahkan indeks ke kolom LASTNAME seperti ini:

CREATE INDEX idx1 ON EMPLOYEE (LASTNAME);

Penelusuran dengan LASTNAME sekarang akan lebih cepat di tabel ini. Dalam contoh ini, "idx1" adalah nama indeks. Ini akan memudahkan untuk mereferensikan indeks itu sendiri di masa mendatang jika perlu.

Cara lain untuk menambahkan indeks ke tabel adalah dengan perintah ALTER TABLE. Untuk mencapai hal yang sama yang kita lakukan dengan pernyataan sebelumnya, kita akan menjalankan perintah berikut:

ALTER TABLE EMPLOYEE ADD INDEX idx1 (LASTNAME);

Cara terakhir untuk menambahkan indeks yang akan menghemat waktu adalah dengan melakukannya selama CREATE TABLE. Jika Anda tahu sebelumnya bahwa Anda akan mencari atau bergabung pada kolom tertentu, Anda dapat membuat tabel awal dengan indeks yang sudah ada di sana:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID),
  INDEX idx1 (LASTNAME)
);

Ketiga pernyataan ini menghasilkan hasil yang sama.

Indeks Beberapa Kolom

Sebuah indeks tidak hanya harus berada di satu kolom. Jika kita ingin pencarian yang lebih cepat pada FIRSTNAME dan LASTNAME, kita dapat membuat indeks pada kedua kolom. Pada tabel create akan terlihat seperti ini:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID),
  INDEX idx2 (LASTNAME,FIRSTNAME)
);

Menggunakan perintah CREATE INDEX:

CREATE INDEX idx2 ON EMPLOYEE (LASTNAME, FIRSTNAME);

Dan terakhir, perintah ALTER TABLE:

ALTER TABLE EMPLOYEE ADD INDEX idx2 (LASTNAME, FIRSTNAME);

Membuat INDEKS UNIK

Mungkin ada saatnya Anda ingin membuat indeks pada kolom dan juga memaksa semua entri di kolom itu menjadi unik. Jika kita memperluas tabel contoh kita untuk menyertakan kolom OFFICE (menunjukkan kantor mana di gedung yang mereka miliki), maka kita mungkin ingin menjadikannya sebagai indeks UNIK. Mari bekerja dengan tabel ini:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  OFFICE INT,
  PRIMARY KEY (ID)
);

Perhatikan bahwa sekarang kita memiliki bilangan bulat yang disimpan dalam tabel untuk menunjukkan kantor mana yang ditempati orang tersebut. Ini mungkin merujuk ke tabel lain, “KANTOR”, yang akan berisi informasi tentang berbagai kantor di dalam gedung.

Untuk membuat indeks ini, kami akan mengeluarkan perintah berikut:

CREATE UNIQUE INDEX idx3 ON EMPLOYEE (OFFICE);

Anda dapat menggunakan perintah serupa untuk membuatnya dalam perintah CREATE TABLE dan ALTER TABLE. Sekarang jika Anda mencoba menjalankan dua sisipan ini:

INSERT INTO EMPLOYEE (ID, FIRSTNAME, LASTNAME, OFFICE) VALUES (1, 'JANE', 'JOHNSON', 1);

INSERT INTO EMPLOYEE (ID, FIRSTNAME, LASTNAME, OFFICE) VALUES (2, 'JOHN', 'SMITH', 1);

Anda akan menerima kesalahan pada INSERT kedua:

Duplicate entry '1' for key 'idx3'

Menghapus Indeks

Mungkin ada saatnya Anda tidak lagi menginginkan indeks pada kolom. Mungkin Anda menyadari bahwa Anda tidak terlalu sering mencari kolom, dan indeks memperlambat penyisipan dan pembaruan. Untuk melakukan ini, kita akan menggunakan perintah DROP INDEX. Tabel kami dibuat seperti ini:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR,
  LASTNAME CHAR,
  PRIMARY KEY (ID),
  INDEX idx (LASTNAME,FIRSTNAME)
);

Jika kita ingin menghapus indeks pada kolom LASTNAME dan FIRSTNAME, kita akan mengeluarkan perintah ini:

DROP INDEX IDX ON EMPLOYEE;

Kesimpulan

Indeks basis data adalah alat dasar yang mengoptimalkan kecepatan pengambilan data dalam struktur yang memanfaatkan kinerja pencarian dan pembacaan dalam sebuah tabel. Peningkatan indeks terutama didorong dengan biaya lebih banyak penulisan dan/atau ruang penyimpanan untuk mempertahankan struktur data indeks yang optimal.

Database MySQL dan MariaDB menawarkan beberapa opsi pencarian dan baca lainnya, termasuk banyak yang tidak tercakup di sini. Takeaways utama di sini meliputi: 

  • Pastikan Anda meluangkan waktu untuk merencanakan meja Anda terlebih dahulu.
  • Jika Anda tidak merencanakan sebelumnya saat membuat tabel, evaluasi kolom yang paling banyak ditelusuri dan buat indeks untuk kolom tersebut.

Lihat Tindakannya!

Jajaran server khusus kami yang luas menyediakan kekuatan, stabilitas, dan keamanan yang dibutuhkan untuk meng-host database terkecil untuk bisnis yang sedang berkembang hingga pengaturan server berkerumun ketersediaan tinggi untuk perusahaan terbesar. Ingin melihat solusi apa yang dapat kami tawarkan untuk memenuhi kebutuhan Anda?

Hubungi kami di 800.580.4985, atau buka obrolan atau tiket dengan kami untuk berbicara dengan salah satu Solusi kami yang berpengalaman atau penasihat Hosting Berpengalaman untuk mempelajari bagaimana Anda dapat memanfaatkan teknologi ini hari ini!

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. Menyetel ulang kata sandi ROOT di MySQL 5.6

  2. Format angka menjadi 2 tempat desimal

  3. Buang database mysql ke cadangan plaintext (CSV) dari baris perintah

  4. Replikasi MySQL:Transaksi Salah dalam Replikasi Berbasis GTID

  5. MySQL SELECT saja bukan nilai nol