10,000の可能なすべての値が定義され、それぞれに「使用中」フラグが設定されたテーブルを保存することをお勧めします。このように、番号を解放して再利用することは、「inuse=false」を設定するための簡単な更新です。
また、利用可能な最低値を簡単に見つけることができます
SELECT idstring
FROM idstringtable
ORDER BY idstring ASC
WHERE (available = 1)
LIMIT 1
適切なロック/トランザクションを使用してこれを行うと、2つ以上のリクエストが同じIDを取得するのを防ぐことができます。また、テーブルが小さいため、グローバルテーブルロックを実行してもパフォーマンスに大きな影響はありません。
そうしないと、番号付けシーケンスの最初の「ギャップ」を見つけようとして、ユーザーテーブルの周りをうろついていることになります。