UNIK dan KUNCI UTAMA adalah batasan , bukan indeks. Meskipun sebagian besar database menerapkan batasan ini dengan menggunakan indeks. Overhead tambahan kendala selain indeks tidak signifikan, terutama ketika Anda menghitung biaya pelacakan dan koreksi duplikat yang tidak disengaja ketika (tidak jika) terjadi.
Indeks biasanya lebih efektif jika Anda memiliki selektivitas yang tinggi . Ini adalah rasio jumlah nilai yang berbeda dengan jumlah total baris.
Misalnya, di kolom Nomor Jaminan Sosial, Anda mungkin memiliki 1 juta baris dengan 1 juta nilai berbeda. Jadi selektivitasnya adalah 1000000/1000000 =1,0 (walaupun ada pengecualian historis yang langka, SSN dimaksudkan untuk menjadi unik).
Tapi kolom lain di tabel itu, "gender" mungkin hanya memiliki dua nilai berbeda di atas 1 juta baris. 2/1000000 =selektivitas sangat rendah.
Sebuah indeks dengan batasan UNIQUE atau PRIMARY KEY dijamin memiliki selektivitas 1,0, sehingga indeks akan selalu seefektif mungkin.
Anda bertanya tentang perbedaan antara kunci utama dan batasan unik. Terutama, Anda hanya dapat memiliki satu batasan kunci utama per tabel (bahkan jika definisi batasan itu mencakup banyak kolom), sedangkan Anda dapat memiliki beberapa batasan unik. Kolom dengan batasan unik dapat mengizinkan NULL, sedangkan kolom dalam batasan kunci utama tidak boleh mengizinkan NULL. Jika tidak, kunci utama dan unik sangat mirip dalam implementasi dan penggunaannya.
Anda bertanya dalam komentar tentang apakah akan menggunakan MyISAM atau InnoDB. Di MySQL, mereka menggunakan istilah storage engine . Ada banyak perbedaan halus antara kedua mesin penyimpanan ini, tetapi yang utama adalah:
- InnoDB mendukung transaksi, sehingga Anda dapat memilih untuk memutar kembali atau melakukan perubahan. MyISAM secara efektif selalu melakukan autocommit.
- InnoDB memberlakukan batasan kunci asing. MyISAM tidak menerapkan atau bahkan menyimpan batasan kunci asing.
Jika fitur-fitur ini adalah hal yang Anda butuhkan dalam aplikasi Anda, maka Anda harus menggunakan InnoDB.
Untuk menanggapi komentar Anda, tidak sesederhana itu. InnoDB sebenarnya lebih cepat daripada MyISAM dalam beberapa kasus, jadi itu tergantung pada campuran aplikasi Anda dari pemilihan, pembaruan, kueri bersamaan, indeks, konfigurasi buffer, dll.
Lihat http:// /www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ untuk perbandingan kinerja yang sangat menyeluruh dari mesin penyimpanan. InnoDB menang atas MyISAM cukup sering sehingga jelas tidak mungkin untuk mengatakan yang satu lebih cepat dari yang lain.
Seperti kebanyakan pertanyaan terkait kinerja, satu-satunya cara untuk menjawabnya untuk aplikasi Anda adalah menguji kedua konfigurasi menggunakan aplikasi Anda dan sampel data yang representatif, dan mengukur hasilnya.