Производительность базы данных с зацикленными запросами на обновление?

0

В настоящее время я структурирую свои запросы для модели обновления базы данных с помощью 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: извините, не хотел, чтобы это звучало как "да" или "нет", очевидно, если да или нет, ответ "да", но я ищу больше, в какой степени это мешает производительности?

Теги:
database
performance

1 ответ

0

Да.

Вы выпускаете несколько обновлений, а не один. Влияние производительности менее вероятно, будет в вашем 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').

  • 0
    обновленный вопрос, чтобы отразить мои надежды на ответ, извините, я не был ясен раньше.
  • 1
    Влияние на производительность будет зависеть от того, сколько пар ключ / значение у вас есть, сколько запросов выполняется, сколько таблиц и т. Д. Если вы выполняете только 5 запросов, это должно быть почти мгновенно. user_id влияние на производительность было бы, чтобы убедиться, что поле user_id проиндексировано.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню