Добрый день.
В БД есть таблица в которой 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?