#std412¶
Упорядочивание результатов запроса¶
1.1.¶
Если алгоритм обработки зависит от порядка записей или результат показывается пользователю, в тексте запроса следует использовать УПОРЯДОЧИТЬ ПО.
Без УПОРЯДОЧИТЬ ПО нельзя делать предположений о порядке строк результата.
Типичные проблемы без явной сортировки:
- разная последовательность строк табличной части при заполнении по запросу;
- разный порядок вывода строк и колонок в отчетах;
- разное заполнение движений документа по результатам запроса.
Вероятность расхождений возрастает:
- при переносе на другую СУБД;
- при смене версии СУБД;
- при изменении параметров СУБД.
Примечание
Для запросов, по которым формируются движения, сортировка оправдана только если она является частью алгоритма (например, FIFO). Иначе сортировка создает лишнюю нагрузку на СУБД.
1.2.¶
При сортировке по полю, которое может содержать NULL, учитывайте: на разных СУБД порядок может отличаться.
Неправильно
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
ЗапасыОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки КАК ЗапасыОстатки
ПО (ЗапасыОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
УПОРЯДОЧИТЬ ПО
КоличествоОстаток
Правильно
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки КАК ЗапасыОстатки
ПО (ЗапасыОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
УПОРЯДОЧИТЬ ПО
КоличествоОстаток
См. также¶
Особенности работы с различными СУБД.
1.3.¶
Если результаты запроса отображаются пользователю:
- сортируйте по полям примитивных типов;
- сортировку по ссылочным полям заменяйте сортировкой по их строковым представлениям.
Иначе порядок строк для пользователя будет выглядеть случайным.
См. также¶
#std781: Особенности сортировки в таблице значений.
1.4.¶
Отсутствие УПОРЯДОЧИТЬ ПО допустимо только если одновременно верно:
- алгоритм не зависит от порядка строк;
- результат не показывается пользователю;
- результат всегда содержит одну запись.
В этих случаях сортировку лучше не добавлять, чтобы не увеличивать время выполнения запроса.
Совместное использование с конструкцией РАЗЛИЧНЫЕ¶
2.¶
Если используется РАЗЛИЧНЫЕ, сортируйте только по полям, включенным в ВЫБРАТЬ.
Причина: поля сортировки неявно попадают в выборку и это может привести к появлению нескольких строк с одинаковыми значениями основных полей выборки.
Ограничения на использование конструкции АВТОУПОРЯДОЧИВАНИЕ¶
3.¶
Использование ПЕРВЫЕ совместно с АВТОУПОРЯДОЧИВАНИЕ запрещено.
В остальных случаях АВТОУПОРЯДОЧИВАНИЕ также не рекомендуется, так как разработчик не контролирует поля сортировки. Такая конструкция оправдана только когда конкретный порядок не важен, но должен быть одинаковым на разных СУБД.
Причины использования АВТОУПОРЯДОЧИВАНИЕ нужно указывать в комментарии непосредственно перед текстом запроса.
Проверки¶
#bslls:SelectTopWithoutOrderBy