Есть ли простой способ предотвратить рост количества идентификаторов строк в MySQL? - PullRequest
0 голосов
/ 10 сентября 2010

Мне было интересно, какой простейший способ автоматической установки идентификаторов таблицы, кроме AUTO_INCREMENT.

У меня есть таблица, которая будет накапливать тысячи строк в течение длительного периода времени.Некоторые из этих строк будут удалены позже.Как получить новые строки для получения наименьшего доступного идентификатора, не занимаясь этим вручную.

Можно ли, например, сбрасывать AUTO_INCREMENT каждый раз, когда кто-то добавляет строку?

Ответы [ 5 ]

4 голосов
/ 10 сентября 2010

Честно говоря, это не стоит хлопот.Я считаю, что это возможно, но это просто уникальный идентификатор в конце дня - не имеет значения, его 1 или 1000.

Если это для других целей, рассмотрите возможность использования другого поля.

IMO, вы не должны связываться с индексами.

2 голосов
/ 10 сентября 2010

Невозможно, идентификатор является уникальным и может быть использован один раз.

возможно только при очистке таблицы.

1 голос
/ 10 сентября 2010

Кого это волнует? целое число может иметь миллиарды уникальных значений, все они стоят одинакового объема памяти (по 4 байта каждое).Азартные игры с первичным ключом подобны русской рулетке для вашей базы данных: в конце ваша база данных умрет (она будет повреждена).

0 голосов
/ 10 сентября 2010

Можно сбросить автоматическое приращение до следующего возможного идентификатора:

ALTER TABLE table_name AUTO_INCREMENT = 1

Вам даже не нужно устанавливать его на следующую доступную клавишу.MySQL автоматически примет следующий ключ при следующем обновлении.Так что даже установка «1» каждый раз безопасна.

Но если вас не волнует идентификатор, почему вы вообще используете идентификатор?А также даже большое количество идентификаторов не является проблемой.Я получил таблицу с более чем 20 миллионами записей, и у меня никогда не было проблем с идентификаторами.

0 голосов
/ 10 сентября 2010

Полагаю, вы могли бы использовать для этого триггеры, но через некоторое время это, вероятно, превратится в огромный беспорядок.Не понимаю, почему вы не хотите использовать auto_increment вместо этого, у вас есть какая-то конкретная причина?

Триггеры в MySQL 5.0

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

...