2014-01-12 5 views
0

У меня есть возможность вставить много данных (около 30 строк каждые 5 минут) двумя способами:Использовать MySQL вставить несколько раз или один большой запрос?

A) Используйте PHP для создания функции вставки и для каждой новой части данных просто вызывайте функцию и вставляйте ее 30 раз

B) Использование PHP и построить один большой запрос, добавив к строке SQL для каждой шины, а затем вставить только один раз

Какой из них является более эффективным?

+0

B есть. Только одна операция для сервера базы данных. – suspectus

ответ

1

Проблема с выполнением отдельных вставок или объемных вставок - в данном случае - не должна быть в первую очередь связана с производительностью. Любая база данных должна иметь возможность обрабатывать скорость вставки 6 записей в минуту.

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

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

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

Как правило, лучше правильно работать с кодом, прежде чем приступать к преждевременным оптимизации. Поскольку объем обновлений по-прежнему довольно мал, я думаю, что это преждевременная оптимизация, и отдельные обновления, вероятно, это путь.

+0

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

1

Второй вариант будет более эффективным, так как существует меньше запросов к базе данных.

Вы можете попробовать что-то в следующих строках:

insert into table imatable values (something, something, something), (somethingelse, somethingelse, somethingelse), (etc, etc, etc) 
Смежные вопросы