Каков наилучший способ (для повышения производительности): добавить сортировку по полю в SQL-запрос или отсортировать данные, когда они уже получены?
Это ORDER BY
, а не сортировать по.
Это вопрос компромисса: сортировка на стороне клиента распределена, что означает меньшее влияние на сервер. Однако для этого может потребоваться больше клиентских ресурсов.
Если поле не проиндексировано, чтобы вернуть весь отсортированный набор записей, серверу потребуется выполнить следующие действия:
- Получить весь набор записей
- Сортировать
- Отправить его по сети клиенту
, тогда как для сортировки на стороне клиента требуются только точки 1
и 3
(которые являются наименее ресурсоемкими).
Если вашему серверу необходимо одновременно обслуживать сотни клиентов, а вашим клиентам нужны целые наборы записей, то, скорее всего, сортировка на стороне клиента будет более эффективной.
Если поле проиндексировано, база данных может вернуть данные, уже отсортированные по этому индексу. Однако для этого потребуется дополнительный поиск в таблице, чтобы получить другие поля.
Кроме того, если вам не нужен весь набор записей, а только некоторые верхние поля (как в ORDER BY LIMIT
или SELECT TOP … ORDER BY
), весь набор записей не нужно будет извлекать и передавать по сети. В этом случае заказ на стороне базы данных, вероятно, будет более эффективным.