Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Der schnellste Weg, um 11.000.000 eindeutige IDs zu generieren

Wenn Sie die folgende Tabelle erstellen:

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

Setzen Sie dann diese drei Abfragen nacheinander ab:

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

Die dritte Abfrage ist garantiert um eine eindeutige Sequenznummer zurückzugeben. Diese Garantie gilt auch dann, wenn Sie Dutzende verschiedener Client-Programme mit Ihrer Datenbank verbunden haben. Das ist das Schöne an AUTO_INCREMENT.

Anstatt nur elf Millionen dieser Sequenznummern im Voraus zu generieren, können Sie diese SQL-Abfragen verwenden, um jederzeit eine eindeutige Sequenznummer zu erhalten.

Wenn Sie bei Sequenznummer 12 Millionen umbrechen müssen, können Sie stattdessen diese Abfragen verwenden.

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

Der Trick dabei ist, eine automatisch inkrementierte Sequenznummer für die Eindeutigkeit zu verwenden, aber auch die Zeilen in der Tabelle zu löschen, damit sie nicht viel Platz verschlingt.

Beachten Sie, dass Sie die Sequenznummer von LAST_INSERT_ID() auch für andere Zwecke verwenden können, wie zum Beispiel.

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;