Premetto che sono un fan sfegatato degli id interi autoincrementali delle tabelle SQL usati come chiave primaria. Prima o poi tornano utili e fanno comunque comodo.
Un collega qualche giorno fa mi ha detto di essere un po’ perplesso degli id autoincrementali per via del rischio di overflow.
MySQL, infatti, in caso di raggiungimento del limite del contatore autoincrementale non permette di aggiungere ulteriori record. Non è una bella situazione. Mi sono deciso, quindi, a fare un paio di conti.
Ipotizziamo un id autoincrementale di tipo UNSIGNED INT: abbiamo 4 byte di dati, pari a 32 bit pari a 4.294.967.295 in base decimale. Ipotizzando l’inserimento in una tabella di un milione di record al giorno (11 record al secondo) avremmo 4.295 giorni (poco meno di 12 anni) di vita della nostra tabella. Decisamente inaccettabile.
Meglio utilizzare un id autoincrementale di tipo UNSIGNED BIGINT: 8 byte, 64 bit e 18.446.744.073.709.551.615 possibili valori. Se ipotizziamo un miliardo di record al giorno (11.500 al secondo) potremmo avere spazio di crescita per circa 25 milioni di anni. Potrebbe essere sufficiente.
Lascia un commento