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

Hurtigste måde at generere 11.000.000 unikke id'er på

Hvis du opretter følgende tabel:

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

Send derefter disse tre forespørgsler efter hinanden:

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

Den tredje forespørgsel er garanteret for at returnere et unikt sekvensnummer. Denne garanti gælder, selvom du har snesevis af forskellige klientprogrammer forbundet til din database. Det er det smukke ved AUTO_INCREMENT.

I stedet for blot at generere elleve millioner af disse sekvensnumre på forhånd, kan du bruge disse SQL-forespørgsler til at få et unikt sekvensnummer, når du har brug for det.

Hvis du skal omslutte med sekvensnummer 12 millioner, kan du bruge disse forespørgsler i stedet.

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

Tricket her er at bruge et auto-increment sekvensnummer for unikhed, men også at slette rækkerne i tabellen, så den ikke optager en masse plads.

Bemærk, at du også kan bruge sekvensnummeret LAST_INSERT_ID() til andre formål, som f.eks.

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. Tekst eller numerisk felt - En simpel SQL-metode til at skifte datatype

  2. Ufanget undtagelse 'PDOException' med beskeden 'Der er ingen aktiv transaktion'?

  3. SQL Vælg kun rækker med minimumsværdi på en kolonne med Where Condition

  4. Løsning af problemet med SQLinjection