Mysql
 sql >> база данни >  >> RDS >> Mysql

Колко лошо е използването на SELECT MAX(id) в MYSQL вместо mysql_insert_id() в PHP?

Въпросът не е дали са вероятни потенциални лоши ситуации. Въпросът е дали са възможни. Стига да има нетривиална вероятност проблемът да възникне, ако е известен, трябва да се избягва.

Не е като да говорим за промяна на едноредово извикване на функция в чудовище от 5000 реда, за да се справим с отдалечено възможен крайен случай. Говорим за действително съкращаване на обаждането до по-четливо и по-правилно използване.

Донякъде съм съгласен с @Mark Baker, че има някои съображения за производителност, но тъй като id е първичен ключ, MAX запитването ще бъде много бързо. Разбира се, LAST_INSERT_ID() ще бъде по-бързо (тъй като просто чете от променлива на сесия), но само с незначителна сума.

И не са ви необходими много потребители, за да се случи това. Всичко, от което се нуждаете, е много едновременни заявки (дори не толкова много). Ако времето между началото на вмъкването и началото на избора е 50 милисекунди (ако приемем, че е безопасен за транзакции DB двигател), тогава имате нужда само от 20 заявки в секунда, за да започнете да удряте проблем с това последователно. Въпросът е, че прозорецът за грешка е нетривиален. Ако кажете 20 заявки в секунда (което в действителност не е много) и ако приемем, че средният човек посещава една страница в минута, вие говорите само за 1200 потребители. И това е, за да се случва редовно. Това може да се случи веднъж само с 2 потребители.

И точно от документацията на MySQL на предмет :

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. Как да възстановите MySQL база данни от физически файлове

  2. Преобразуване на разделен низ в множество стойности в mysql

  3. org.json.JSONException:Стойност <br от тип java.lang.String не може да бъде преобразувана в JSONObject

  4. MySql разлика между две времеви марки в дни?

  5. DECIMAL дължина за микровреме (вярно)?