2013-08-14 2 views
1

Im работает с классическим ASP, и все мои страницы выполняют множественные вызовы (хранимые процедуры) в базу данных для создания страницы (отчеты, формы ...). Лучше сделать 1 вызов с несколькими наборами записей или сделать то, что я делаю (несколько вызовов)?SQL Хранимые процедуры Вызов против нескольких наборов записей

Я знаю, может быть, что-то лучше с другими языками (PHP, C# ...), но мое приложение было полностью создано в классическом ASP.

Tks

+1

Звонок представляет собой дополнительную поездку туда и обратно. – Paparazzi

ответ

2

Как всегда, есть место для обоих способов.

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

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

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

В типичной веб-ферме база данных и серверы страниц довольно близки друг к другу, так что латентность сети не так уж плоха. Я профилировал некоторые из наших производственных нагрузок, и есть несколько мест, где мы последовательно вызываем несколько запросов к базе данных, принимаем менее 1 мс за 10 запросов к базе данных.

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

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

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