Задать вопрос
@pibiv

Как найти первый свободный ID в базе данных?

Добрый день.

В БД есть таблица в которой 2 поля
user_id(autoincrement)
full_name

В таблице несколько милионов записей. Данные переодически удаляються и добавляються.

В данный момент задача заключаеться в том что бы при создании нового пользователя при возможности давать ему id не по автоинкременту а сначала делать проверку на возможно свободные id.

То есть при создании пользователя, если есть свободный id например 325 то дать ему его.

Вопрос заключаеться в том как реализовать поиск такого ID с минимальной нагрузкой, поскольку в таблице несколько милионов записей.

Здравый смысл мне подсказывает что взять и перебрать несколько милионов записей это мягко говоря не вариант.

Интересует элегантное решение, в данный момент я остановился на следующих вариантах
  • Создать отдельную таблицу в которой я буду хранить свободные ID
  • Осуществлять поиск SQL запросом средней сдожности




Запрос типа такого

SELECT MIN( uid +1 ) 
FROM  `users `
WHERE uid +1 NOT 
IN (

SELECT uid
FROM  `users`
)


Загводка еще в том что с системой может одновременно работать 100 или 200 пользователей, и я так подразумеваю с точки зрения SQL это тоже может быть накладно.

Итог, золотая середина это допонтиельная таблица с свободными ID?
  • Вопрос задан
  • 4479 просмотров
Подписаться 2 Оценить Комментировать
Решение пользователя Виталий К ответам на вопрос (3)
xytop
@xytop
PHP/RoR web dev & tech lead
> Создать отдельную таблицу в которой я буду хранить свободные ID
лучший вариант.
Ответ написан