Когда нужно исправить пробелы автоинкремента в MYSQL - PullRequest
2 голосов
/ 23 декабря 2009

База данных, над которой я сейчас работаю, содержит записи, которые добавляются и удаляются десятками тысяч, и из-за этого в автоинкрементном ключе есть пробелы в больших сотнях тысяч и числа с автоматическим приращением, доходящие до миллиардов.

Эти числа никогда не сохраняются для ссылки на отдельную запись, но используются для ссылки на запись при выполнении расчетов на лету.

Есть ли какая-либо причина для удаления этих пробелов и сброса номера автоприращения, или это несущественно?

Поле id - это целое число без знака, я должен увеличить его до большого целого без знака? Из того, что я понимаю, прямо сейчас, если оно достигнет 4 294 967 295, оно сломается.

Ответы [ 2 ]

3 голосов
/ 23 декабря 2009

Единственная причина, по которой я бы беспокоился об этом, это то, что вы оказались рядом с этим пределом 2 ^ 32. Если вы не используете столбец в качестве идентификатора строки, даже не беспокойтесь об этом.

РЕДАКТИРОВАТЬ Если вы используете этот столбец для какой-либо идентифицирующей информации, то я бы переключил столбец на GUID или что-то еще, потому что вы получите переполнение, и тогда вы будете получить повторяющиеся значения. И это не Буэно.

1 голос
/ 23 декабря 2009

Я не знаю, какова скорость роста вашего автоинкрементного поля, но для вас должна быть простая математическая оценка, когда вы достигнете предела 4294967295.

Если вы все еще чувствуете, что вам нужно что-то сделать, у вас есть следующие варианты:

  1. сброс текущего счетчика до 1. В идеале сделайте это, опустив столбец и воссоздав его. Поскольку вы не используете это поле для ссылочной целостности, должно быть быстрое и простое исправление до следующего раза ...
  2. Измените тип данных на BIGINT без знака. Теперь вы можете перейти на 18446744073709551615. Но вам нужно больше места в куче для хранения этого увеличенного объема данных, и вы только отложили свою проблему.
  3. Изменить с автоинкремента (INT / BIGINT) на UUID . Тогда вы можете перестать беспокоиться о числах и природе бесконечности, но вам, скорее всего, придется изменить весь код вашего клиента.

С другой стороны, я чувствую какое-то плохое решение или два где-то раньше здесь.

...