Perbedaan antara Kunci, Kunci Utama, Kunci Unik dan Indeks di MySQL

250

Ketika saya harus menggunakan KEY, PRIMARY KEY, UNIQUE KEYdan INDEX?

TOLONG
sumber
2
Kunci PRIMARY adalah untuk mengidentifikasi baris, mencegah memasukkan dua baris dengan data yang sama identik ... Kunci INDEX adalah untuk mempercepat pencarian (penyisipan minimal lambat). Kunci UNIK untuk data unik di kolom.
Hos Mercury

Jawaban:

303

KEYdan INDEXsinonim dalam MySQL. Mereka berarti hal yang sama. Dalam database Anda akan menggunakan indeks untuk meningkatkan kecepatan pengambilan data. Indeks biasanya dibuat pada kolom yang digunakan di JOIN, WHERE, dan ORDER BYklausa.

Bayangkan Anda memiliki tabel yang dipanggil usersdan Anda ingin mencari semua pengguna yang memiliki nama belakang 'Smith'. Tanpa indeks, database harus melewati semua catatan tabel: ini lambat, karena semakin banyak catatan yang Anda miliki di database Anda, semakin banyak pekerjaan yang harus dilakukan untuk menemukan hasilnya. Di sisi lain, indeks akan membantu database melompati cepat ke halaman yang relevan di mana catatan 'Smith' disimpan. Ini sangat mirip dengan cara kita, manusia, menelusuri direktori buku telepon untuk menemukan seseorang dengan nama belakang: Kami tidak mulai mencari-cari di direktori dari awal hingga akhir, selama kami memasukkan informasi dalam urutan tertentu sehingga kami dapat gunakan untuk melompat dengan cepat ke halaman 'S'.

Kunci primer dan kunci unik serupa. Kunci utama adalah kolom, atau kombinasi kolom, yang dapat mengidentifikasi baris secara unik. Ini adalah kasus khusus kunci unik . Sebuah tabel dapat memiliki paling banyak satu kunci utama, tetapi lebih dari satu kunci unik. Saat Anda menentukan kunci unik pada kolom, tidak ada dua baris berbeda dalam tabel yang dapat memiliki nilai yang sama.

Perhatikan juga bahwa kolom yang didefinisikan sebagai kunci primer atau kunci unik secara otomatis diindeks di MySQL.

Daniel Vassallo
sumber
2
dapatkah saya memiliki kunci unik dan kunci primer dengan nilai yang sama?
BANTUAN
58
@needHELP: Jika Anda memiliki tabel yang dipanggil passengersdengan bidang-bidang berikut :, (id, first_name, last_name, age, passport_number)Anda biasanya mengatur idkolom untuk menjadi kunci utama. Kunci utama secara otomatis adalah kunci unik. Perbedaan utama adalah bahwa Anda hanya dapat memiliki satu kunci utama pada tabel, dan bahwa kolom tidak dapat berisi NULLnilai. Tidak perlu untuk mengatur idkolom menjadi UNIQUEkarena dengan pengaturan untuk kunci utama, itu otomatis dijamin akan unik ... Kemudian Anda juga bisa mengatur passport_numberuntuk UNIQUEagar tidak lebih dari satu penumpang ...
Daniel Vassallo
32
... akan dapat memiliki nomor paspor yang sama. Namun Anda mungkin memiliki beberapa penumpang (misalnya anak-anak) tanpa nomor paspor. Dalam hal ini, Anda dapat memasukkan NULLdi kolom itu, tanpa masalah.
Daniel Vassallo
2
@DanielVassallo Saya suka cara Anda menghapusnya antara sinonim yang digunakan oleh MySQL.
SIFE
1
Salah satu penjelasan terbaik. Terima kasih banyak :-)
Ravi Hirani
61

KEY dan INDEX adalah sinonim.

Anda harus menambahkan indeks ketika pengukuran kinerja dan MENJELASKAN menunjukkan kepada Anda bahwa kueri tidak efisien karena indeks yang hilang. Menambahkan indeks dapat meningkatkan kinerja kueri (tetapi dapat memperlambat modifikasi ke tabel).

Anda harus menggunakan UNIQUE ketika Anda ingin membatasi nilai dalam kolom (atau kolom) agar menjadi unik, sehingga upaya untuk memasukkan nilai duplikat menghasilkan kesalahan.

KUNCI UTAMA keduanya merupakan kendala unik dan juga menyiratkan bahwa kolom BUKAN NULL. Ini digunakan untuk memberikan identitas pada setiap baris. Ini dapat berguna untuk bergabung dengan tabel lain melalui batasan kunci asing. Meskipun tidak diperlukan untuk sebuah tabel untuk memiliki KUNCI UTAMA, biasanya merupakan ide yang bagus.

Mark Byers
sumber
KUNCI UTAMA digunakan untuk memberikan identitas pada setiap baris? jelaskan maaf atas ketidaktahuan saya.
BANTUAN
@needHELP: Ini digunakan sebagai cara untuk mengidentifikasi secara unik setiap baris di tabel Anda. Misalnya, jika Anda ingin menghapus baris tertentu di tabel Anda, ada baiknya memiliki beberapa cara untuk mengidentifikasinya secara jelas sehingga Anda tidak sengaja menghapus baris yang salah. Ini juga berguna untuk bergabung dengan tabel lain saat diindeks.
Mark Byers
48

Kunci primer tidak memungkinkan NULLnilai, tetapi kunci unik memungkinkan NULLnilai.

Kami hanya dapat mendeklarasikan satu kunci utama dalam sebuah tabel, tetapi sebuah tabel dapat memiliki beberapa kunci unik (penetapan kolom).

Er.Gaurav singh
sumber
17

PRIMARY KEYDAN UNIQUE KEYserupa kecuali memiliki fungsi yang berbeda. Kunci utama membuat baris tabel unik (yaitu, tidak ada 2 baris dengan kunci yang sama persis). Anda hanya dapat memiliki 1 kunci utama dalam tabel database.

Kunci unik membuat kolom tabel dalam baris tabel menjadi unik (yaitu, tidak ada 2 baris tabel yang memiliki nilai persis sama). Anda dapat memiliki lebih dari 1 kolom tabel kunci unik (tidak seperti kunci primer yang berarti hanya 1 kolom tabel dalam tabel ini unik).

INDEXjuga menciptakan keunikan. MySQL (contoh) akan membuat tabel pengindeksan untuk kolom yang diindeks. Dengan cara ini, lebih mudah untuk mengambil nilai baris tabel ketika kueri ditanya pada kolom tabel yang diindeks. Kerugiannya adalah jika Anda melakukan banyak pembaruan / penghapusan / pembuatan, MySQL harus mengelola tabel pengindeksan (dan itu bisa menjadi hambatan kinerja).

Semoga ini membantu.

Buhake Sindi
sumber
Juga, UNIQUE KEYbisa NULLtetapi PRIMARY KEYtidak bisa NULL.
Rafay
10

Tombol Unik: Kolom di mana tidak ada dua baris yang serupa

Kunci Utama: Kumpulan jumlah minimum kolom yang secara unik dapat mengidentifikasi setiap baris dalam sebuah tabel (yaitu tidak ada dua baris yang sama di semua kolom yang merupakan kunci utama). Mungkin ada lebih dari satu kunci utama dalam sebuah tabel. Jika ada kunci unik maka itu adalah kunci primer (bukan "kunci utama") dalam tabel. Jika tidak ada kunci unik maka lebih dari satu nilai kolom akan diperlukan untuk mengidentifikasi baris seperti (first_name, last_name, father_name, mother_name) dapat di beberapa tabel merupakan kunci utama.

Indeks: digunakan untuk mengoptimalkan kueri. Jika Anda akan mencari atau mengurutkan hasil berdasarkan beberapa kolom berkali-kali (mis. Kebanyakan orang akan mencari siswa berdasarkan nama dan bukan dengan nomor roll mereka.) Maka dapat dioptimalkan jika nilai kolom semua " diindeks "misalnya dengan algoritma pohon biner.

Ashwini Dhekane
sumber
Saya pikir Anda bermaksud mengatakan bahwa hanya ada satu PK dalam sebuah tabel
Răzvan Flavius ​​Panda
7

Kunci primer - kita hanya bisa menempatkan satu kunci utama pada tabel ke dalam tabel dan kita tidak bisa membiarkan kolom itu kosong ketika kita memasukkan nilai ke dalam tabel.

Kunci Unik - kita dapat meletakkan lebih dari satu kunci unik di atas sebuah tabel dan kita dapat membiarkan kolom itu kosong ketika kita memasukkan nilai-nilai ke dalam tabel. kolom mengambil nilai unik (tidak sama) ketika kami menerapkan kunci primer & unik.

VIKASH
sumber
tabel hanya memiliki satu KUNCI UTAMA, tetapi kunci unik lebih dari satu.
VIKASH
6

Kunci utama digunakan untuk bekerja dengan tabel yang berbeda. Ini adalah dasar dari basis data relasional. Jika Anda memiliki database buku, lebih baik membuat 2 tabel - 1) buku dan 2) penulis dengan kunci utama "id" INT. Kemudian Anda menggunakan id di buku, bukan nama penulis.

Kunci unik digunakan jika Anda tidak ingin entri berulang. Misalnya Anda mungkin memiliki judul di tabel buku Anda dan ingin memastikan hanya ada satu entri untuk setiap judul.

irudyak
sumber
2

Kunci unik:

  1. Lebih dari satu nilai bisa nol.
  2. Tidak ada dua tuple yang dapat memiliki nilai yang sama dalam kunci unik.
  3. Satu atau lebih kunci unik dapat digabungkan untuk membentuk kunci utama, tetapi tidak sebaliknya.

Kunci utama

  1. Dapat berisi lebih dari satu kunci unik.
  2. Uniknya merepresentasikan tuple.
Pritam Banerjee
sumber