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

Seberapa buruk menggunakan SELECT MAX(id) di MYSQL daripada mysql_insert_id() di PHP?

Intinya bukan jika situasi buruk yang potensial mungkin terjadi. Intinya adalah jika mereka mungkin. Selama ada kemungkinan non-sepele masalah yang terjadi, jika diketahui itu harus dihindari.

Ini tidak seperti yang kita bicarakan tentang mengubah panggilan fungsi satu baris menjadi monster 5000 baris untuk menangani kasus tepi yang memungkinkan dari jarak jauh. Kita berbicara tentang mempersingkat panggilan menjadi penggunaan yang lebih mudah dibaca dan lebih benar.

Saya agak setuju dengan @Mark Baker bahwa ada beberapa pertimbangan kinerja, tetapi karena id adalah kunci utama, MAX permintaan akan sangat cepat. Tentu, LAST_INSERT_ID() akan lebih cepat (karena hanya membaca dari variabel sesi), tetapi hanya dengan jumlah yang sepele.

Dan Anda tidak perlu banyak pengguna untuk ini terjadi. Yang Anda butuhkan hanyalah banyak permintaan bersamaan (bahkan tidak sebanyak itu). Jika waktu antara mulai dari sisipan dan awal pilih adalah 50 milidetik (dengan asumsi mesin DB aman transaksi), maka Anda hanya perlu 20 permintaan per detik untuk mulai memukul masalah dengan ini secara konsisten. Intinya adalah bahwa jendela untuk kesalahan tidak sepele. Jika Anda mengatakan 20 permintaan per detik (yang pada kenyataannya tidak banyak), dan dengan asumsi bahwa rata-rata orang mengunjungi satu halaman per menit, Anda hanya berbicara 1200 pengguna. Dan itu terjadi secara teratur. Itu bisa terjadi sekali dengan hanya 2 pengguna.

Dan langsung dari dokumentasi MySQL di subjek :

You can generate sequences without calling LAST_INSERT_ID(), but the utility of 
using the function this way is that the ID value is maintained in the server as 
the last automatically generated value. It is multi-user safe because multiple 
clients can issue the UPDATE statement and get their own sequence value with the
SELECT statement (or mysql_insert_id()), without affecting or being affected by 
other clients that generate their own sequence values.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hapus semua baris yang tidak memiliki id di tabel lain

  2. masukkan beberapa baris menggunakan satu nilai forigenk dalam formulir

  3. Migrasi Django :tidak membuat tabel

  4. Kunci asing MySQL pada diri sendiri

  5. Backup Best Practices untuk MySQL, MariaDB dan Galera Cluster