Lepiej byłoby przechowywać tabelę ze zdefiniowanymi wszystkimi 10 000 możliwych wartości i flagą „w użyciu” na każdej z nich. W ten sposób zwolnienie numeru do ponownego wykorzystania jest prostą aktualizacją ustawienia „inuse=false”.
Ułatwia również znalezienie najniższej dostępnej wartości
SELECT idstring
FROM idstringtable
ORDER BY idstring ASC
WHERE (available = 1)
LIMIT 1
Wykonanie tego z odpowiednimi blokadami/transakcjami uniemożliwiłoby co najmniej dwóm żądaniom uzyskanie tego samego identyfikatora, a ponieważ jest to mały stół, globalna blokada tabeli nie wpłynie znacząco na wydajność.
W przeciwnym razie utknąłbyś, szperając w tabeli użytkowników, próbując znaleźć pierwszą „przerwę” w sekwencji numeracji.