Доброго времени суток! Встала необходимость частого инсерта данных в MySQL. Подскажите, пожалуйста, каким образом их можно делать максимально быстро. Использовать ли подготовленные запросы, как настроить мускул и т.д.? Может, есть статья на эту тему? Спасибо!
Сколько запросов в секунду нужно? MySQL из коробки может справляться с ними достаточно хорошо, возможно вам вообще не нужно ничего оптимизировать. А так, вот несколько базовых советов:
Транзакции
LOAD DATA INFILE
Prepared
INSERT INTO user (id, name) VALUES (1, 'John'), (2, 'Mike'); будет быстрее, чем 2 отдельных запроса
Вопросы со словами "часто", "много", "быстро" надо закрывать. Поскольку они отражают не реальные потребности а влажные эротические мечты.
То есть ни одного инсерта еще не было сделано, ни одной проблемы в связи с "частыми" инсертами у автора не возникло, у него и БД-то еще нет. Но но вместо того, чтобы заниматься всеми насущными проблемами, автор с энтузиазмом кидается решать несуществующие.
Автор, вы занимаетесь преждевременной оптимизацией.
Это зло.
Сверхоптимизация инсертов нужна, если у вас БД лежит на дискете или MFM-винте. В остальных случаях сервер все сделает за вас. Его писали очень умные люди (уж точно и меня и вас)
P.S. Мне кажется, кроме плашек сложности вопроса "простой", "средний" и "сложный" нужна плашка "ненужный" или "легко ищется поисковиком.
Автор!
Быстрые запросы на вставку в БД нужны для приложений уровня эльдорадо, мвидео и т.д.
В данном текущем случае, очевидно, речь идет о БД уровня страница хомячка, поэтому - ЗАБЕЙ! Хомячки это одобряют.
Алекс Арт, если у вас приложение уровня гугл, то просто наймите грамотного технического директора. Он вам все объяснит. В частности, что ваш вопрос в принципе не имеет смысла в таком контексте.
Подготавливаем большой запрос инсерт с пачкой values и выполняем его.
При вставке данных может куча времени тратится на пересчет индексов. В первом и втором вариантах инжексы пересчитаются 1 раз.
Правда если у вас вам нужно втсавить 1кк записей - стоит это делать в цикле например по 500 записей за раз, что бы доступность таблицы для других действий не нарушалась.
Все верно, но есть одна проблема - аффтар забыл указать, в одном процессе он делает эти инсерты, или в разных. Причем, скорее всего, он и сам этого не знает. Этот вопрос не стоит ответа.