Найти в Дзене
Oracle Developer

Друзья, всем привет

! 👋 На связи Паша, ваш куратор и специалист в мире Oracle. Сегодня хочу разобрать тему, которая часто всплывает и на собеседованиях, и в реальной жизни — INDEX FULL SCAN vs INDEX FAST FULL SCAN. Итак, поехали 🚀 🔍 INDEX FULL SCAN Это классика: Oracle проходит индекс от корня до листьев и читает его последовательно и целиком. Особенности: • одноблочное чтение; • данные возвращаются отсортированными; • используем индекс как упорядоченный источник данных. Плюсы: уходим от сортировки. Минусы: работает медленнее из-за одноблочного последовательного чтения. ⚡️ INDEX FAST FULL SCAN Совершенно иной подход: Oracle читает индекс целиком, как таблицу. Что происходит под капотом: • multiblock I/O (как в full table scan) • возможен параллелизм • данные приходят без сортировки 🧠 Как запомнить INDEX FULL SCAN: • важен порядок • читаем медленно, но отсортировано INDEX FAST FULL SCAN: • важна скорость • читаем быстро, но без сортировки 🚀 Практический пример и работа с NULL Как изве

Друзья, всем привет! 👋

На связи Паша, ваш куратор и специалист в мире Oracle. Сегодня хочу разобрать тему, которая часто всплывает и на собеседованиях, и в реальной жизни — INDEX FULL SCAN vs INDEX FAST FULL SCAN. Итак, поехали 🚀

🔍 INDEX FULL SCAN

Это классика: Oracle проходит индекс от корня до листьев и читает его последовательно и целиком.

Особенности:

• одноблочное чтение;

• данные возвращаются отсортированными;

• используем индекс как упорядоченный источник данных.

Плюсы: уходим от сортировки.

Минусы: работает медленнее из-за одноблочного последовательного чтения.

⚡️ INDEX FAST FULL SCAN

Совершенно иной подход: Oracle читает индекс целиком, как таблицу.

Что происходит под капотом:

• multiblock I/O (как в full table scan)

• возможен параллелизм

• данные приходят без сортировки

🧠 Как запомнить

INDEX FULL SCAN:

• важен порядок

• читаем медленно, но отсортировано

INDEX FAST FULL SCAN:

• важна скорость

• читаем быстро, но без сортировки

🚀 Практический пример и работа с NULL

Как известно, Оракл не хранит null-значения в btree-индексах. Как это выглядит на практике?

1. Cоздаём структуру

create table t_idx_test as

select * from all_objects;

alter table t_idx_test modify owner null;

create index t_idx on t_idx_test(status,owner);

2. Запрос по nullable-полю с фильтром

select --+ index_ffs(t_idx_test t_idx)

count(*) from t_idx_test

where owner = 'SCOTT';

-----------------------------------------

| Id | Operation | Name |

-----------------------------------------

| 0 | SELECT STATEMENT | |

| 1 | SORT AGGREGATE | |

| * 2 | INDEX FAST FULL SCAN | T_IDX |

-----------------------------------------

Predicate Information:

-----------------------------

* 2 - filter("OWNER"='SCOTT')

3. Запрос без фильтров

select --+ index (t_idx_test t_idx)

count(*) from t_idx_test;

-------------------------------------------

| Id | Operation | Name |

-------------------------------------------

| 0 | SELECT STATEMENT | |

| 1 | SORT AGGREGATE | |

| * 2 | TABLE ACCESS FULL | T_IDX_TEST |

-------------------------------------------

Hint Report: 1 (U - Unused (1))

-------------------------------------------

2 - SEL$1 / T_IDX_TEST@SEL$1

U - index (t_idx_test t_idx)

✅ Резюме

Как и прочие инструменты, INDEX FULL SCAN и INDEX FAST FULL SCAN хороши для своих задач. Главное — применять их правильно и понимать разницу между ними. Если вы хотите досконально разбираться в таких нюансах работы оптимизатора - заполняйте анкету предзаписи на 8-ой поток по оптимизации. И присылайте в чатик свои кейсы применения сегодняшних операций.

#oracle #sql #performance #оптимизация #обучение #Pavel_Dolganov

Канал Oracle Developer | Чатик 💬

Мини-курс Оптимизация: Быстрый старт 🚀

📱 YouTube 📱 ВКонтакте 📱 LinkedIn 📱Threads

RUTUBE