sql >> Database >  >> RDS >> Mysql

Snelste manier om 11.000.000 unieke id's te genereren

Als u de volgende tabel maakt:

 CREATE TABLE sequence (
     sequence_id BIGINT NOT NULL AUTO_INCREMENT,
     PRIMARY KEY (`sequence_id`)
) 

Geef vervolgens deze drie vragen na elkaar op:

INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() AS sequence;

De derde vraag is gegarandeerd om een ​​uniek volgnummer te retourneren. Deze garantie geldt zelfs als u tientallen verschillende clientprogramma's op uw database hebt aangesloten. Dat is het mooie van AUTO_INCREMENT.

In plaats van alleen elf miljoen van deze volgnummers vooraf te genereren, kunt u deze SQL-query's gebruiken om een ​​uniek volgnummer te krijgen wanneer u het nodig hebt.

Als u het volgnummer 12 miljoen moet afronden, kunt u in plaats daarvan deze zoekopdrachten gebruiken.

INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
SELECT LAST_INSERT_ID() MOD 12000000 AS sequence;

De truc hier is om een ​​automatisch oplopend volgnummer te gebruiken voor uniciteit, maar om ook de rijen in de tabel te verwijderen, zodat deze niet veel ruimte in beslag neemt.

Merk op dat u het volgnummer van LAST_INSERT_ID() ook voor andere doeleinden kunt gebruiken, zoals bijvoorbeeld.

INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
INSERT INTO user (userid, username, phone) 
          VALUES (LAST_INSERT_ID() MOD 12000000, 'Joe', '800-555-1212');
SELECT LAST_INSERT_ID() MOD 12000000 AS sequence;


  1. Problemen hebben met een MySQL Join die aan meerdere voorwaarden moet voldoen

  2. mysqli -- voorbereidingsverklaring mislukt met fout geen tabel gebruikt

  3. Javascript-bibliotheken die SQL-achtige query's op JSON-gegevens mogelijk maken?

  4. Hoe kan ik een MySQL-resultatenset meer dan eens doorlopen met de mysql_*-functies?