@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?
  • Вопрос задан
  • 4433 просмотра
Решения вопроса 1
xytop
@xytop
PHP/RoR web dev & tech lead
> Создать отдельную таблицу в которой я буду хранить свободные ID
лучший вариант.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
martin74ua
@martin74ua Куратор тега MySQL
Linux administrator
не надо вам это... Ну не обращайте вы внимание на значение автоинкрементного поля, забудьте про него...
Ответ написан
Комментировать
alex-saratov
@alex-saratov
Правильно говорят. После запроса Insert можно получить присвоенный ID и оперировать им ну как угодно. Не забивайте код не нужными операциями. В большинстве это уже выполнено.

php.net/manual/ru/mysqli.insert-id.php
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы