INDEX FULL SCAN и INDEX FAST FULL SCAN

В продолжение темы . Индекс на основе B* - дерева состоит из узловых и листовых блоков. Листовые блоки образуют двусвязный список. То есть блоки индекса последовательно связаны между собой ссылками. Но это совершенно не значит, что в сегменте индекса они размещены упорядочено. Вероятнее только оракл их кладет туда в произвольном порядке.

 

 

Теперь рассмотрим два вроде бы похожих вида индексных доступа: INDEX FULL SCAN и INDEX FAST FULL SCAN. Оба эти метода позволяют получать ROWID записей в таблице и по нему обращаться к записям таблицы (в том случае, если в индекс содержит все требуемые запросом колонки, то к таблице оракл вообще не обращается). Оба эти метода требуют, чтобы хотя бы одна колонка ключа имела ограничение not null.

 

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

 

INDEX FULL SCAN - при таком способе доступа оракл просматривает листовые блоки индекса в порядке их вхождения в двусвязный список листовых блоков. Что это дает? Этот метод гарантирует выборку ключей по порядку - обеспечивает отсортированную выборку. Но есть и минус в таком методе. Если индексные записи в списке находятся рядом, это совершенно не значит, что и в сегменте они также являются соседями. А это приводит к одиночному физическому чтению блоков, что не является быстрым способом получения данных с диска.

 

FULL SCAN доступно, если предикат ссылается на один из ключей индекса. Этот метод также доступен, когда нет предиката, но выполняются оба следующих условия:

 

- Все колонки, указанные в запросе, включены в индекс.

- По крайней мере, одна из индексных колонок имеет ограничение not null

 

INDEX FAST FULL SCAN - при таком методе читаются все индексные блоки в сегменте.

 

Выбираются между них листовые блоки, из которых уже берутся значения индекса.

 

Так как индексные блоки в сегменте размещены неупорядоченно, следовательно и результат выборки не может быть использован как отсортированная последовательность. Но есть существенный плюс в таком методе выборки. Из сегмента читаются сразу несколько смежных блоков за один заход (multiblock reads). Индекс читается несколькими параллельными процессами. Это позволяет довольно быстро получить данные с диска. FAST FULL SCAN позволяет добраться к данным, находящимся в индексе, без доступа к таблице.

 

Используется, когда индекс содержит все колонки, необходимые для запроса. А также одна колонна в индексном ключе должна иметь NOT NULL ограничение или хотя бы в конструкции WHERE на ключевую колонку должно быть выставлено условие is not null.

Вас заинтересует / Intresting for you:

Индексы Oracle
Индексы Oracle 15328 просмотров Игорь Воронов Tue, 21 Nov 2017, 13:18:46
Еще раз о защелках, очередях, ...
Еще раз о защелках, очередях, ... 6318 просмотров Tue, 21 Nov 2017, 13:31:33
Блокировки в базе данных Oracl...
Блокировки в базе данных Oracl... 7159 просмотров Александров Попков Sat, 07 Jul 2018, 04:04:51
Пример использования NULL - св...
Пример использования NULL - св... 4883 просмотров dbstalker Tue, 21 Nov 2017, 13:32:50
Войдите чтобы комментировать