sql >> Databasteknik >  >> RDS >> Mysql

Snabbaste sättet att generera 11 000 000 unika ID

Om du skapar följande tabell:

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

Skicka sedan dessa tre frågor efter varandra:

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

Den tredje frågan är garanterad för att returnera ett unikt sekvensnummer. Denna garanti gäller även om du har dussintals olika klientprogram kopplade till din databas. Det är det fina med AUTO_INCREMENT.

Istället för att bara generera elva miljoner av dessa sekvensnummer i förväg kan du använda dessa SQL-frågor för att få ett unikt sekvensnummer när du behöver det.

Om du måste gå runt på sekvensnummer 12 miljoner kan du använda dessa frågor istället.

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

Tricket här är att använda ett automatiskt ökande sekvensnummer för att vara unik, men att också ta bort raderna i tabellen så att den inte slukar mycket utrymme.

Observera att du också kan använda sekvensnumret för LAST_INSERT_ID() för andra ändamål, som till exempel.

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. Hur man skickar en sträng som en WHERE-sats i MYSQL

  2. Lägg till dagar till ett datum i SQLite

  3. Att få en dynamiskt genererad pivottabell till en Temp-tabell

  4. Räkna antalet rader i en tabell