2010-09-08 2 views
2

В чем разница в производительности создания единой базы данных (MySql), которая извлекает 10 результатов или делает 10 одиночных вызовов для получения этих результатов индивидуально?Одиночный вызов базы данных и множественные вызовы базы данных Производительность

Если кто-то лучше другого, есть ли способ, по которому я могу проверить производительность между ними? (Мне просто интересно, потому что в будущем, если у меня будет еще один вопрос о производительности, я мог бы использовать предложенный способ самостоятельно проверить)

ответ

5

Один вызов всегда будет быстрее, чем несколько вызовов для одних и тех же данных. Просто обход сети и задержка - это компонент, но и запуск и срыв обработки SQL окажут некоторое влияние.

0

один звонок лучше. Меньше круглых поездок между вами и БД, меньше обработки. Меньшая передача данных для наборов записей (ну, только немного).

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

1

Что более тяжелое - 10 яблок или велосипед?
Запросов не равные!. Вы не можете просто сравнить его по номерам!
Запрос должен быть чувствительный. Период. Не мыслимо быстрее, но разумно. Выполнение этой работы на этом месте. Это единственная причина предпочесть один запрос другому.

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

И ответить на ваш вопрос будущего производительности -
Learn профилирование

BENCHMARK <query> и EXPLAIN <query> инструменты для баз данных профилирования и настройки производительности

0

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

start = CurrentTime() 
do 1000 times 
    for i from 1 to 10 
    query_for_one_row(i) 
    end 
end 
end = CurrentTime() 
time_for_individual_queries = (end - start)/1000 

start = CurrentTime() 
do 1000 times 
    query_for_rows(1,10) 
end 
end = CurrentTime() 
time_for_bulk_queries = (end - start)/1000 

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

+0

У mysql есть оператор 'BENCHMARK' –

+1

@Col. Шрапнель Это ничего не говорит о стоимости открытия 10 подключений или подготовке и выполнении 10 запросов или чего-либо еще, что должно произойти на стороне клиента или говорить от клиента к серверу. «BENCHMARK» проверяет, как выполняется запрос на сервере (что также может быть полезно, но оно не включает всю стоимость, которая нам интересна). Я представляю общий способ протестировать полную стоимость 10 небольших запросов против одного большого. –

-1

OLD нить я знаю ... думал, что я бы одолжить мои 2 цента в любом случае :)

Есть некоторые вряд ли ситуация, когда несколько вызовов может понадобиться ... Любой НИКОМУ, пожалуйста, поправьте меня, если я ошибаюсь здесь ,

Я столкнулся с ситуацией, когда я вытаскивал информацию из базы данных и составлял в простой CSV ... Ну, в конечном итоге, было много данных, привязанных к МНОГО таблиц, членов, заказов, элементов в заказе, продукта , различные версии продуктов и т. д. ...Выполнение одного запроса буквально длилось вечно, и вы можете утверждать, что DB shema, вероятно, была бы немного другой, но способ, которым я исправил это, заключался в простом запросе данных ... затем запустить отдельные запросы и выполнить флеш() данные в интерфейс.

Хотя я согласен в 99% ситуаций, что 1 запрос всегда лучший, есть несколько маловероятных сценариев, где несколько могут быть полезны.

Смежные вопросы