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

Tabel MySQL dengan indeks komposit tetapi bukan kunci utama

Beberapa poin:

Sepertinya Anda hanya menggunakan apa yang saat ini unik tentang tabel dan menjadikannya sebagai kunci utama. Itu bekerja. Dan kunci alami memiliki beberapa keunggulan dalam hal kueri karena lokalitas. (Data untuk setiap pengguna disimpan di area yang sama). Dan karena tabel dikelompokkan oleh kunci itu yang menghilangkan pencarian data jika Anda mencari berdasarkan kolom di primer.

  1. Namun, menggunakan kunci primer alami seperti yang Anda pilih juga memiliki kelemahan kinerja.

  2. Menggunakan kunci utama yang sangat besar akan membuat semua indeks lainnya menjadi sangat besar di innodb karena kunci utama disertakan dalam setiap nilai indeks.

  3. Menggunakan kunci primer alami tidak secepat kunci pengganti untuk INSERT karena selain menjadi lebih besar tidak bisa hanya menyisipkan di akhir tabel setiap kali. Itu harus disisipkan di bagian untuk pengguna itu dan posting dll.

  4. Juga, jika Anda mencari berdasarkan waktu, kemungkinan besar Anda akan mencari di seluruh tabel dengan kunci alami kecuali waktu adalah kolom pertama Anda. kunci pengganti cenderung lokal untuk waktu dan sering kali tepat untuk beberapa kueri.

  5. Menggunakan kunci alami seperti milik Anda sebagai kunci utama juga dapat mengganggu. Bagaimana jika Anda ingin mengacu pada suara tertentu? Anda membutuhkan beberapa bidang. Juga agak sulit digunakan dengan banyak ORM.

Inilah Jawabannya

Saya akan membuat kunci pengganti Anda sendiri dan menggunakannya sebagai kunci utama daripada mengandalkan kunci utama internal innodb karena Anda akan dapat menggunakannya untuk pembaruan dan pencarian.

ALTER TABLE tbl_rate 
ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
ADD PRIMARY KEY(id);

Tetapi, jika Anda membuat kunci primer pengganti, saya juga akan membuat kunci Anda menjadi UNIK. Biaya yang sama tetapi memaksakan kebenaran.

ALTER TABLE tbl_rate 
ADD UNIQUE ( user_id, post_id, type );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa perbedaan antara INNER JOIN, LEFT JOIN, RIGHT JOIN dan FULL JOIN?

  2. Kesalahan fatal:Pengecualian yang tidak tertangkap 'mysqli_sql_exception' dengan pesan 'Tidak ada indeks yang digunakan dalam kueri/pernyataan yang disiapkan'

  3. MySQL Masukkan ke dalam beberapa tabel? (normalisasi basis data?)

  4. Rata-rata pada hitungan() dalam kueri yang sama

  5. Buat komentar untuk tampilan di mysql