mysqli_multi_query или несколько mysqli_query, что быстрее? [Дубликат]

-> если мы перебираем объект JavaScript, используя и находим ключ из массива объектов

Object.keys(Array).forEach(key => {

 console.log('key',key)

})
7
задан EmmanuelG 20 June 2012 в 14:28
поделиться

2 ответа

  • What is multi_query doing under the hood? - просто посылка всех запросов на сервер одновременно, а не по одному, и получение всех результатов за один раз. Ничего сложнее.
  • Does multi_query simply hit the server x number of times and aggregates the results? - он дважды «ударяет» по серверу - один раз для отправки запросов и один раз для получения результатов.
  • Is there a case where single queries may be more efficient than multiple queries? - зависит от того, как вы определяете «эффективный». multi_query() светится в сети, но память тяжелая, работает query() в контуре наоборот. Для многих операторов SELECT, которые возвращают большие результаты, потери в потреблении памяти, вероятно, значительно перевесят выигрыш в терминах сети, и большую часть времени вам будет лучше выдавать запросы и обрабатывать результат, устанавливаемый на одном время - хотя это зависит от того, что вы делаете с данными. Но если вам нужно запустить много UPDATE операторов, вполне вероятно, что multi_query() будет лучше, так как возвращаемые значения будут просто успешными / неудачными, а потребление памяти будет светлым. Вам придется взвесить все факторы, как то, что вы делаете, сколько времени вы ожидаете от этого, латентность сети между сервером (клиентом) и клиентом, доступными ресурсами (в основном памятью) на сервере и клиентом и т. Д. , и т. д. ... и возьмем его в каждом конкретном случае.

Я нашел эту запись для некоторых тестов производительности , сделанных некоторое время назад, когда вывод что от использования multi_query() можно получить общий коэффициент полезного действия. Однако тестовый случай просто выполнял 4 запроса, каждый из которых SELECT имел единственный результат, а определение «более эффективно» просто «быстрее». Нет тестирования для большего количества запросов или больших наборов результатов, и, хотя скорость важна, это не все и все - я могу сделать что-нибудь невероятно быстро, если я дам ему неограниченное количество памяти, но попытка сделать что-то одновременно потерпит неудачу. Это также не тест реального мира, так как конечный результат может быть достигнут с помощью одного запроса JOIN ed.

Лично я считаю, что это несколько академический, потому что если вы запускаете большой набор инструкций сразу, 90% времени они будут изменяются только в передаваемых данных и структура запроса останется неизменной - что является очевидным кандидатом для подготовленных операторов.

12
ответ дан DaveRandom 24 August 2018 в 19:45
поделиться

Ответ выше неправильный.

Что делает multi_query под капотом?

Он просто отправляет все запросы на сервер сразу , при получении результата только для первого. Таким образом, multi_query является своего рода оболочкой для выполнения асинхронного запроса .

Много ли пытается несколько раз на сервер х число раз и агрегирует результаты?

multi_query попадает на сервер только один раз. Все остальные образы, которые вы должны сделать вручную, вызывая next_result, чтобы получить все результаты других запросов.

Есть ли случай, когда одиночные запросы могут быть более эффективными, чем несколько запросов?

этот вопрос предполагает, что есть случай, когда multi_query быстрее. Это сомнительное утверждение. Для обычного запроса сетевая латентность является незначительной частью всего времени выполнения. Если вы действительно заинтересованы в скорости на такой маркер , взгляните на HandlerSocket - он будет быстро вспыхивать. Однако для регулярной разработки такая разница между одним и несколькими запросами была бы вашей наименее заботой. Если вы заботитесь о реальных вещах, а не о мнимых.

1
ответ дан Your Common Sense 24 August 2018 в 19:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: