sql >> Database teknologi >  >> RDS >> Mysql

Hvor dårligt er det at bruge SELECT MAX(id) i MYSQL i stedet for mysql_insert_id() i PHP?

Pointen er ikke, om potentielle dårlige situationer er sandsynlige. Pointen er, om de er mulige. Så længe der er en ikke-triviel sandsynlighed for, at problemet opstår, bør det undgås, hvis det er kendt.

Det er ikke sådan, at vi taler om at ændre et funktionskald på én linje til et monster på 5000 linjer for at håndtere en eksternt mulig edge-case. Vi taler om faktisk at forkorte opkaldet til en mere læsbar og mere korrekt brug.

Jeg er lidt enig med @Mark Baker i, at der er nogle præstationsovervejelser, men siden id er en primær nøgle, MAX forespørgslen vil være meget hurtig. OK, LAST_INSERT_ID() vil være hurtigere (da det kun er at læse fra en sessionsvariabel), men kun med en ubetydelig mængde.

Og du behøver ikke mange brugere for at dette kan ske. Alt du behøver er en masse samtidige anmodninger (ikke engang så mange). Hvis tiden mellem start af indsatsen og starten af ​​valget er 50 millisekunder (forudsat en transaktionssikker DB-motor), så behøver du kun 20 anmodninger i sekundet for at begynde at ramme et problem med dette konsekvent. Pointen er, at vinduet for fejl er ikke-trivielt. Hvis du siger 20 anmodninger i sekundet (hvilket i virkeligheden ikke er meget), og antager, at den gennemsnitlige person besøger en side i minuttet, taler du kun om 1200 brugere. Og det er for at det skal ske regelmæssigt. Det kunne ske én gang med kun 2 brugere.

Og lige fra MySQL-dokumentationen på emnet :

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. Sådan konverteres excel-ark til database af sqlite i Android

  2. Sådan filtrerer du i et til mange forhold med android room db

  3. #1062 - Dubleret indtastning '' for nøglen 'unique_id', når du forsøger at tilføje UNIQUE KEY (MySQL)

  4. MariaDB VERSION() Forklaret