Задать вопрос
@racheev

MySQL on duplicate key update. Как избавиться от увеличения ID?

Как сделать что бы ID не увеличивалась при обновлении? Вариант не работает, или я не понимаю что происходит внутри.
Насколько я понимаю когда запись вставлена в базу, она получает свой айди, и если попадается запись с таким же хешем, то просто идет обновление хеша а айди остается тем же и счетчик не увеличивается. Но сейчас я вижу что айди с дырками… идет 1 2 3 4 5 8 20 23 24 56 70 и так далее.. Может надо какой-то еще уникальный индекс типа хеша сделать?
INSERT INTO posts (channel_id, message_id, message, hash) 
VALUES 
(:channel_id, :message_id, :message, :hash)
ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id), hash = VALUES(hash)
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Простой 13 комментариев
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Дырки могут быть связаны с механикой кеширования sequence для каждого сеанса mysql.
По сути если 10 сеансов хотят быстро и без конкуренции вставлять в таблицу то они должны
прочитать пачку номеров. Например первый сеанс с 1 по 10 и второй с 11 по 20 и так далее.
В разных БД это реализовано по разному но это в целом - механика оптимизации скорости.
И если сеанс закрылся и недочитал 7, 8, 9 номер то и хер с ним. Диапазон уже был использован
как туалетная бумага.

У тебя-же нет желания доставать из ведра грязную бумагу и еще раз ее использовать?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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