В настоящее время я структурирую свои запросы для модели обновления базы данных с помощью CodeIgniter.
Я получаю введенные формы ввода с помощью $keys = array_keys($_POST)
Чтобы обновить поля базы данных, я хотел сделать что-то вроде этого
foreach($keys as $key){
$data = $this->input->post($key);
$this->db->query("Update $table SET '$key'='$data' WHERE user_id='$the_user->id'"); }
(это не производственный код, просто пытающийся проиллюстрировать мой вопрос, следовательно, нет экранирования, проверки и т.д.)
Мой вопрос в том, представляет ли это проблему с производительностью, запустив отдельный запрос для каждой отдельной части данных формы?
EDIT: извините, не хотел, чтобы это звучало как "да" или "нет", очевидно, если да или нет, ответ "да", но я ищу больше, в какой степени это мешает производительности?
Да.
Вы выпускаете несколько обновлений, а не один. Влияние производительности менее вероятно, будет в вашем php-цикле и больше в соединении с базой данных; таким образом минимизируя количество транзакций между вашим приложением и базой данных, улучшат производительность.
Вы можете попробовать:
создайте строку SQL перед отправкой:
UPDATE <table> SET key1=data1, key2=data2, key3=data3 WHERE user_id=<user>
выполнение нескольких обновлений в одной транзакции:
$this->db->query("
UPDATE <table> SET key1=data1 WHERE user_id=<user>;
UPDATE <table> SET key2=data2 WHERE user_id=<user>;
UPDATE <table> SET key3=data3 WHERE user_id=<user>;"
);
Я не уверен, как PHP/MySQL обрабатывает второй вариант. Perl/Postgres могут это сделать. Кроме того, я думаю, что первый вариант будет быстрее.
Еще одна вещь, которую следует учитывать, если вы делаете это для нескольких пользователей, - это использовать IN
(например, WHERE user_id IN ($user_list)
, где $user_list - это строка пользователей в формате 'user1','user2','user3'
).
user_id
влияние на производительность было бы, чтобы убедиться, что полеuser_id
проиндексировано.