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.
-
Namun, menggunakan kunci primer alami seperti yang Anda pilih juga memiliki kelemahan kinerja.
-
Menggunakan kunci utama yang sangat besar akan membuat semua indeks lainnya menjadi sangat besar di innodb karena kunci utama disertakan dalam setiap nilai indeks.
-
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.
-
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.
-
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 );