Когда вы делаете сотни тысяч запросов на сервере БД, переход отВСТАВИТЬ .... дублирование и автоинкрементного выпуск
SELECT foo FROM bar WHERE rec_id=xyz
if (!record_found){
INSERT INTO bar (x,y,z) VALUES (1,2,3)
}
к:
INSERT INTO bar (x,y,z) VALUES (1,2,3) ON DUPLICATE KEY UDPATE count=count+1
имеет ОГРОМНЫЙ повышение производительности. Загрузка процессора на сервер резко падает. Однако, если у вас есть поля в таблице, которые настроены на автоматическое увеличение, вы теряете прилегание, и они увеличиваются с очень высокой скоростью.
Меня не интересует соприкосновение поля автоматического приращения, но меня немного беспокоит экспоненциальная скорость, с которой поле автоматического увеличения увеличивается на мгновение, так как я встречаю тонну дубликатов записей. Мы говорим о значении автоинкремента, достигающем значения 10 миллионов +, когда фактическое количество записей в базе данных близко к 0,5 миллионам (в течение недели).
Поле типа BIGINT (20), так что у меня все еще есть пути. Я также понимаю, что, как только он увеличивается на пару порядков, скорость изменения может быть не такой значительной. Если я когда-нибудь нарушу этот предел, могу ли я продолжать делать поле больше? Это лучший способ справиться с этой ситуацией?
Аналогичный, но не точный вопрос здесь: http://stackoverflow.com/questions/5924762/prevent-autoincrement-on-mysql-duplicate-insert – Dave
Включает ли INSERT IGNORE значение поля автоматического увеличения, в случае вставить сбой? (для двигателя хранения innodb) Может ли кто-нибудь ответить на это, если вы знаете окончательно? Я мог бы обойтись с этим. – hvs
, вероятно, это займет 2 минуты, чтобы проверить его. Ты действительно мне нужен? Я буду – Drew