companies.fdb → companies → ORDER BY

SQL · ORDER BY · База данных компаний

ORDER BY в базе данных компаний

Датасет из 300 строк раздела «База данных компаний». Разбираем ORDER BY на живых данных: запрос возвращает 15 строк из 300 за 11.3 мс, полным сканом таблицы.

Структура таблицы companies

Поля и типы данных

ПолеТипNullableИндекс
idintнетда (PK)
namevarchar(80)нет
cityvarchar(80)нет
industryvarchar(80)нет
founded_yearint (1991–2023)нет
employees_countint (5–5000)нет
revenue_mlnrealнет
websitevarchar(80)нет
phonevarchar(80)нет
emailvarchar(80)нет
is_activebooleanнет
legal_formvarchar(80)нет
tax_idvarchar(80)нет
ratingrealнет
registered_datedateнет

Пример строк (8 из 300)

idnamecityindustryfounded_yearemployees_countrevenue_mlnwebsitephoneemailis_activelegal_formtax_idratingregistered_date
234АктивКонсалтИжевскФинансы199149849322.22techplus.ru+7 (933) 961-19-91user1775@example.comtrueИП74560152.132026-06-03
235СтолицаСтройКрасноярскОбразование201314041547.04russtroy.ru+7 (969) 184-35-78user8069@example.comfalseЗАО90120092.122026-05-15
236Рус-ДизайнКрасноярскIT200028427111.27unigroup.net+7 (963) 056-99-11user8473@example.comfalseНКО50340053.862025-09-19
237Гарант-АгроРостов-на-ДонуТуризм19991259988.13rusgroup.biz+7 (982) 434-24-84user9005@example.comfalseЗАО67890254.462026-06-22
238Прогресс-ОйлТюменьПроизводство201419128467.50novainvest.org+7 (991) 954-99-14user2509@example.comtrueИП65670122.012025-12-25
239Практик-ДизайнНовосибирскРеклама199638427225.62bestservis.biz+7 (947) 483-64-90user6203@example.comtrueЗАО50120062.302026-04-03
240Мега-МаркетМоскваТуризм199823779247.59alfacorp.ru+7 (928) 099-98-58user1281@example.comfalseООО73450022.512025-02-21
241Мега-МаркетВоронежОбразование20182122569.61megatrade.org+7 (917) 451-85-82user6382@example.comtrueНКО51230201.342025-04-09

SQL-запрос: ORDER BY

Задача: вывести строки в порядке значения employees_count, а не в порядке вставки.

SELECT * FROM companies ORDER BY employees_count ASC LIMIT 15;
SQL Playground · companies.fdbFileDB Engine
результат появится ниже

Результат выполнения

300строк в таблице
15строк в результате
11.3 мсвремя выполнения

Условие сузило выборку с 300 до 15 строк — это 5% таблицы. Селективность — главный показатель качества условия: чем меньше доля, тем больше пользы от индекса и тем дешевле запрос на больших объёмах.

Первые строки результата

idnamecityindustryfounded_yearemployees_countrevenue_mlnwebsitephoneemailis_activelegal_formtax_idratingregistered_date
35ТехноГруппЕкатеринбургТуризм2012176520.94alfastroy.net+7 (976) 549-61-92user4680@example.comfalseИП30780071.262025-11-24
172КвантДизайнТольяттиСтроительство1992276983.67smartcorp.net+7 (932) 963-53-58user3050@example.comfalseАО20120134.532025-10-23
25ИмперияМаркетЕкатеринбургОбразование2015305492.16ecoline.ru+7 (957) 697-00-68user2588@example.comtrueИП21230072.142025-08-13
208Практик-ОйлКраснодарПроизводство2006336404.40ecotrade.ru+7 (908) 842-05-77user9228@example.comfalseНКО65670084.982025-10-25
27ЗенитИнвестПермьЛогистика2008456207.98uniprom.biz+7 (962) 238-03-82user4288@example.comtrueООО12340203.162025-01-08

Показаны 5 из 15 строк результата.

Как читать этот запрос

Сортировка применяется после фильтрации: сначала движок выбирает строки, затем упорядочивает результат. DESC — по убыванию, ASC (по умолчанию) — по возрастанию; NULL-значения группируются в конце.
Индекса по полю условия нет — движок делает полный скан всех 300 строк. Здесь это дёшево, но на больших таблицах такой запрос — первый кандидат на CREATE INDEX.
Фактическое время: 11.30 мс. Для сравнения: тот же запрос через сетевой протокол добавил бы миллисекунды на сериализацию и round-trip — встраиваемый движок исполняет его in-process.

ORDER BY в разных СУБД

СУБДСинтаксисОтличие
PostgreSQLORDER BY поле DESC NULLS LASTявное управление позицией NULL
MySQLORDER BY поле DESCNULL всегда первыми при ASC, последними при DESC
SQLiteORDER BY поле DESCNULLS FIRST/LAST поддержаны с версии 3.30
FileDBORDER BY поле DESCANSI-порядок, стабильная сортировка

Скачать структуру и данные

Файлы собираются из текущего датасета (seed v1): структура таблицы, 300 строк данных и этот запрос.

Похожие запросы

Вопросы и ответы

Гарантирован ли порядок строк без ORDER BY?

Нет. Без ORDER BY движок возвращает строки в удобном ему порядке, и он может меняться между запусками. Любая «стабильность» без сортировки — совпадение.

Можно ли сортировать по нескольким полям?

Да: ORDER BY поле1 DESC, поле2 ASC. Второе поле работает как «разрешитель ничьих» для одинаковых значений первого.

Куда попадают NULL при сортировке?

Зависит от СУБД: где-то NULL идут первыми, где-то последними. PostgreSQL позволяет указать NULLS FIRST/LAST явно — это надёжнее, чем полагаться на умолчание.