Является ли сортировка табликса в RDL лучше, чем использование ORDER BY в хранимых процедурах?
Уважаемые администраторы и участники stackru:
Привет, приятного всем дня.
Я разрабатывал RDL (и он использует хранимые процедуры в SQL Server 2008 R2 для получения данных) довольно давно в этой компании, в которой я работаю. Наш предыдущий администратор базы данных - это тот, кто проверил мою хранимую процедуру и посоветовал мне внести некоторые изменения, если моя хранимая процедура нуждается в улучшении. И через год он подал в отставку.:-(
И пришел этот новый администратор базы данных, теперь он хочет, чтобы я пересмотрел все мои хранимые процедуры, указанные. те RDL, который использует хранимую процедуру, имеющую ORDER BY
пункт.:-(
Он сказал, что сортировка должна выполняться в отчете /RDL, потому что это как-то разгрузит некоторые ресурсы базы данных, что, в свою очередь, заставит мой отчет генерировать данные быстрее.
Мой вопрос сейчас таков: он прав? Могу ли я прочитать дополнительное чтение, чтобы сопровождать то, что он посоветовал? Или это то, что он посоветовал, просто простое правило, которое я не практиковал с тех пор? (Как он сказал, нет ORDER BY
предложение, и нет форматирования (например, даты, время и т. д.) в хранимых процедурах, все форматирование и сортировка в RDL. Я все еще на полпути к своим изменениям, но я хочу узнать больше о том, что он продолжает инструктировать. Пожалуйста, порекомендуйте.
Спасибо и больше власти всем.:-)
Очень искренне Ваш,
Марк Сквалл
1 ответ
Как я уже говорил, проблема сортировки сводится к сортировке на стороне клиента или на стороне сервера. Связанный вопрос, вероятно, может дать более глубокое обсуждение каждого варианта, но вкратце, нет однозначного ответа на него, у каждого есть свои компромиссы, и то, чем вы жертвуете, в конечном итоге зависит от вашего конкретного варианта использования.
Как вы упоминаете "RDL", я полагаю, вы имеете в виду службы отчетов SQL Server, верно? Если это так, то ситуация иная, так как "сервер" и "клиент" на самом деле две разные программы, работающие, вероятно, на одной машине (поправьте меня, если я ошибаюсь).
В основном, делать это на сервере (т.е. ORDER BY
), механизм БД эффективно выполняет больше работы, как говорит ваш администратор БД. Хорошо, что в SQL, вероятно, имеется больше инструментов для обеспечения более быстрого ответа, чем у клиента (индексы, статистика, предположительно более быстрая загрузка ЦП и т. Д.), А также для таких операций, как разбиение на страницы и TOP
это почти всегда лучший выбор в БД, так как клиенту нужно получать гораздо больше данных для получения результата.
Сортировка на стороне клиента имеет преимущество распределения сортировки. Когда многие клиенты используют БД вместе, их сортировка может снизить нагрузку на процессор на сервере (это, скорее всего, является причиной, лежащей в основе рассуждений вашего администратора баз данных). Также это позволяет клиентам эффективно пересортировать данные о действиях пользователя, не обращаясь к серверу снова (если не задействована подкачка страниц).
Что касается форматирования, о котором вы упоминаете, то здесь я склонен согласиться с администратором. В большинстве случаев форматирование лучше обрабатывать на клиенте, а не обслуживать БД, потому что оно специфично в том, как оно будет отображаться в каждом месте. Наличие даты формата хранимой процедуры и т. Д. Означает привязку его к этому конкретному отчету, а это означает, что вы не можете легко использовать его повторно для других целей. Инструменты на стороне клиента обычно лучше отображают вещи для конечного пользователя и могут даже принимать во внимание такие вещи, как локализация (десятичные разряды, упорядочение формата даты, отступы и т. Д.), Которые, хотя и возможно сделать на сервере, обычно включают в себя больше работать и даже дублировать функциональность форматирования.