Прежде всего, какое преимущество вы пытаетесь получить, повторно используя пропущенные значения? Обычный INT UNSIGNED
позволит вам сосчитать до 4 294 967 295. С «миллионами записей» ваша база данных должна вырасти в тысячу раз, прежде чем закончатся действительные идентификаторы. (А затем использование BIGINT UNSIGNED
увеличит вас до 18 446 744 073 709 551 615 значений.)
Попытка переработать значения, пропущенные MySQL, вероятно, отнимет у вас много времени, пытаясь компенсировать то, что на самом деле не беспокоит MySQL.
С учетом сказанного вы можете найти отсутствующие идентификаторы с помощью чего-то вроде:
SELECT id + 1
FROM the_table
WHERE NOT EXISTS (SELECT 1 FROM the_table t2 WHERE t2.id = the_table.id + 1);
Это найдет только первое пропущенное число в каждой последовательности (например, если у вас есть {1, 2, 3, 8, 10}
, будет найдено {4,9}
), но это, вероятно, будет эффективным, и, конечно, после того, как вы ввели идентификатор, вы можете всегда запускайте его снова.
person
VoteyDisciple
schedule
09.12.2011