powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему индекс не работает для обратного упорядочивания?
10 сообщений из 10, страница 1 из 1
Почему индекс не работает для обратного упорядочивания?
    #39646244
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
create table T (
    ID  bigint not null,
);

alter table T add constraint PK primary key ( ID );



1. Прямой порядок
Код: sql
1.
select * from T order ID


plan ( T order PK )

2. Обратный порядок
Код: sql
1.
select * from T order ID desc


plan sort (V natural)

2a. Попытка обратного порядка
Код: sql
1.
select * from T plan ( T order PK ) order ID desc


index PK cannot be used in the specified plan

Почему? Почему нельзя использовать существующий индекс для обратного упорядочивания? Ведь это ровно тот же самый порядок, только с другим знаком. Да, я знаю, что можно создать еще и descending индекс, но зачем создавать два индекса, когда, казалось бы, можно было бы обойтись и одним?
...
Рейтинг: 0 / 0
Почему индекс не работает для обратного упорядочивания?
    #39646248
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyПочему нельзя использовать существующий индекс для обратного упорядочивания?
потому что индексы в ИБ и ФБ однонаправленные. По ним можно "ходить" только в направлении сортировки ключей, либо ASC, либо DESC. В обратную сторону - нельзя.
Сделано это якобы потому, что у двунаправленных индексов при расщеплении страниц одновременно должны быть модифицированы 3 страницы (2 листовых и одна страница указателей), что приводит к ненадежности при сбоях.
У однонаправленного одновременно модифицируются только 2 страницы.
Типа так.
...
Рейтинг: 0 / 0
Почему индекс не работает для обратного упорядочивания?
    #39646249
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky,

можешь почитать вот это
https://tproger.ru/translations/linked-list-for-beginners/
грубо говоря, "односвязный список" в этой статье - и есть наши индексы. Двунаправленные индексы - это двусвязный список.
Разница в том, что списки в статье - это списки в памяти. А индексы в БД сложнее, потому что список разделен на страницы.
...
Рейтинг: 0 / 0
Почему индекс не работает для обратного упорядочивания?
    #39646252
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во как. Спасибо за разъяснение! Однако этот факт хорошо бы где-нибудь прописать. В руководстве по языку я не увидел, возможно, плохо смотрел. И ничтоже сумнятеша полагался на существующие индексы. Хорошо, на толстой базе заметил уже чисто по времени исполнения запросов.
...
Рейтинг: 0 / 0
Почему индекс не работает для обратного упорядочивания?
    #39646260
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky
План с Order не всегда лучше чем с Sort
...
Рейтинг: 0 / 0
Почему индекс не работает для обратного упорядочивания?
    #39646263
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky,

Я тоже был недоволен такой ситуацией. Есть здесь мой топик на эту тему. Дело особенно неприятное, когда индексы составные. Приходится создавать несколько однотипных. Разработчики знают о проблеме и вроде как хотят решить её.
...
Рейтинг: 0 / 0
Почему индекс не работает для обратного упорядочивания?
    #39646265
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
составные индексы - зло.
(за исключением CONSTRAINT UNIQUE)
в это случае оно просто неизбежное.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему индекс не работает для обратного упорядочивания?
    #39646309
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIРазработчики знают о проблеме и вроде как хотят решить её.

За прошедшие с выпуска Interbase 30 лет решения этой проблемы так никто и не нашёл.

PS: Проблема не в надёжности, а дедлоках.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему индекс не работает для обратного упорядочивания?
    #39646361
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky, KreatorXXI

видимо, вы оба не смотрели мое видео ORDER vs SORT. И про оптимизатор тоже.
https://www.youtube.com/user/ibdeveloper
...
Рейтинг: 0 / 0
Почему индекс не работает для обратного упорядочивания?
    #39646368
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyВо как. Спасибо за разъяснение! Однако этот факт хорошо бы где-нибудь прописать. В руководстве по языку я не увидел, возможно, плохо смотрел. И ничтоже сумнятеша полагался на существующие индексы. Хорошо, на толстой базе заметил уже чисто по времени исполнения запросов.

есть там это, но очень кратко в описании создания индекса.
Впрочем этого достаточно, ибо описание языка и не должно разжёвывать как работает оптимизатор. Это есть в отдельной статье про методы доступа
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему индекс не работает для обратного упорядочивания?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]