×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

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

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.8.4. Индексы и ORDER BY

Помимо простого поиска строк, возвращаемых запросом, индекс может предоставлять их в определенном отсортированном порядке. Это позволяет выполнить требования запроса к ORDER BY сортировке без отдельного этапа сортировки. Из типов индексов, поддерживаемых в настоящее время в Digital Q.DataBase, только B-дерево может выдавать отсортированный результат — остальные типы индексов возвращают соответствующие строки в неопределенном, зависящем от реализации порядке.

Планировщик запросов рассмотрит выполнение условия ORDER BY сортировки либо путем сканирования подходящего доступного индекса, либо путем последовательного сканирования таблицы в физическом порядке с выполнением явной сортировки. Для запроса, требующего сканирования значительной части таблицы, явная сортировка, скорее всего, будет выполнена быстрее, чем использование индекса, так как она требует меньшего объема дискового ввода-вывода благодаря последовательному доступу к данным. Индексы наиболее эффективны в тех случаях, когда необходимо извлечь лишь небольшое количество строк. Важным частным случаем является ORDER BY в сочетании с LIMIT n: при явной сортировке потребуется обработать все данные, чтобы определить первые n строк, но если имеется индекс, соответствующий ORDER BY, первые n строк могут быть извлечены напрямую, без сканирования всей оставшейся части таблицы.

По умолчанию индексы B-дерево хранят записи в порядке возрастания, при этом пустые значения (NULL) располагаются в конце (идентификатор TID таблицы используется в качестве дополнительного столбца для упорядочивания идентичных записей). Это означает, что прямое сканирование индекса по столбцу x формирует результат, соответствующий условию ORDER BY x (или, если описывать более подробно, ORDER BY x ASC NULLS LAST). Индекс также можно сканировать в обратном направлении для получения результата, удовлетворяющего условию ORDER BY x DESC (или, если описывать более подробно, ORDER BY x DESC NULLS FIRST, так как NULLS FIRST используется по умолчанию для ORDER BY DESC).

Порядок сортировки в индексе B-дерево можно настроить с помощью параметров ASC, DESC, NULLS FIRST, и/или NULLS LAST при создании индекса; например:

CREATE INDEX test2_info_nulls_low ON test2 (info NULLS FIRST);
CREATE INDEX test3_desc_index ON test3 (id DESC NULLS LAST);

Индекс, отсортированный по возрастанию с пустыми значениями (NULL) в начале, может удовлетворять условиям ORDER BY x ASC NULLS FIRST или ORDER BY x DESC NULLS LAST в зависимости от того, в каком направлении выполняется сканирование.

Может возникнуть вопрос, зачем предоставлять все четыре варианта, если два варианта в сочетании с возможностью обратного сканирования охватывают все возможные случаи ORDER BY. В одностолбцовых индексах эти параметры действительно избыточны, но в многостолбцовых индексах они могут быть полезны. Рассмотрим индекс по двум столбцам (x, y): он может удовлетворить ORDER BY x, y при сканировании в прямом направлении, или ORDER BY x DESC, y DESC при сканировании в обратном направлении. Однако приложению может часто требоваться использование ORDER BY x ASC, y DESC. Такую сортировку невозможно получить с помощью обычного индекса, но это достижимо, если индекс определен как (x ASC, y DESC) или (x DESC, y ASC).

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

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению