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

Oracle ROWID: Турбоскорость доступа к данным ✨

Все знают про первичные ключи, уникальные индексы и другие способы поиска строк в таблицах. Но есть нечто быстрее их всех. ROWID — уникальный адрес строки на физическом уровне. И если вам нужно молниеносно обратиться к записи, он станет вашим лучшим другом. Любая строка в Oracle имеет свой уникальный идентификатор ROWID, который указывает, где именно она хранится на диске. Это позволяет обращаться к данным без дополнительных индексов, оптимизируя время доступа. 📌 Структура ROWID: Каждая строка имеет свой адрес в следующем формате: OOOOOOFFFBBBBBBRRR Благодаря этой структуре Oracle мгновенно определяет местоположение строки, минуя любые индексы. Хотя ROWID позволяет моментально обращаться к строкам, он может изменяться! Например, после реорганизации таблицы или экспорта/импорта данных. Это значит, что хранить его в колонках бессмысленно — он устареет. Однако использовать в алгоритмах и запросах — вполне разумное решение. Допустим, у нас есть задача: найти строку, выполнить с ней какие-
Оглавление

Все знают про первичные ключи, уникальные индексы и другие способы поиска строк в таблицах. Но есть нечто быстрее их всех. ROWID — уникальный адрес строки на физическом уровне. И если вам нужно молниеносно обратиться к записи, он станет вашим лучшим другом.

Почему ROWID — это суперсила?

Любая строка в Oracle имеет свой уникальный идентификатор ROWID, который указывает, где именно она хранится на диске. Это позволяет обращаться к данным без дополнительных индексов, оптимизируя время доступа.

📌 Структура ROWID:

-2

Каждая строка имеет свой адрес в следующем формате:

OOOOOOFFFBBBBBBRRR

  • OOOOOO — номер объекта (таблицы или индекса),
  • FFF — номер файла,
  • BBBBBB — номер блока в файле,
  • RRR — номер строки внутри блока.

Благодаря этой структуре Oracle мгновенно определяет местоположение строки, минуя любые индексы.

Важный момент: не стоит хранить ROWID в таблицах

Хотя ROWID позволяет моментально обращаться к строкам, он может изменяться! Например, после реорганизации таблицы или экспорта/импорта данных. Это значит, что хранить его в колонках бессмысленно — он устареет. Однако использовать в алгоритмах и запросах — вполне разумное решение.

Как применять ROWID в коде?

Допустим, у нас есть задача: найти строку, выполнить с ней какие-то действия и обновить её. Сделаем это с помощью ROWID:

DECLARE
v_rowid ROWID;
BEGIN
SELECT rowid INTO v_rowid FROM my_tab WHERE ... FOR UPDATE;

-- Производим необходимые операции

UPDATE my_tab t
SET t.поле = новое_значение
WHERE t.rowid = v_rowid;
END;
/

🛠 Как это работает?

  1. Сначала выбираем строку и блокируем её для изменений (FOR UPDATE).
  2. Сохраняем её ROWID в переменную.
  3. Делаем необходимые операции.
  4. Обновляем строку, используя ROWID в условии WHERE.

💡 Почему это круто?

  • Максимальная скорость доступа — быстрее, чем по индексу!
  • Минимальная нагрузка на БД — Oracle сразу знает, где искать данные.
  • Нет лишних индексов — можно работать с любой строкой напрямую.

Итог

Если вам нужен мгновенный доступ к данным, без индексов и сложных планов выполнения запроса — ROWID ваш выбор. Однако не забывайте, что он может изменяться, так что хранить его в таблицах — плохая идея.

А вы уже использовали ROWID в своих проектах? Делитесь опытом в комментариях! 👇👇👇

----------

Хотите разбираться в таких вещах на экспертном уровне? На нашем YouTube-канале мы регулярно разбираем подобные темы, а в Telegram-канале можно задать вопросы и пообщаться с коллегами! Присоединяйтесь! 💡

А еще в нашей онлайн-школе мы проводим обучение по направлениям:🔸PL/SQL; 🔸оптимизация Oracle SQL; 🔸секционирование; 🔸архитектуре СУБД; 🔸Unit-тестированию и др.

Работаем как с физическими так и с юридическими лицами. Напишите в
нашу поддержку или Денису напрямую. Всё официально с возможностью получить налоговый вычет, использовать мат капитал или другие плюшки.

Лицензия на дополнительное образование взрослых и детей Л035-01199-54/01691393 выдана 13.01.2025 г. Министерством образование Новосибирской области Российской Федерации

🔗 Полезные ссылки:

#oracle #plsql #sql #базыданных #rowid #оптимизация #разработка