В Oracle есть нечто, называемое ROWID, которое хранит физический адрес строки в таблице.Они выглядят примерно как AAAA8mAALAAAAQkAAA
, который можно разбить на:
- № объекта данных (сегмент)
[AAAA8m]
- Файл данных в табличном пространстве
[AAL]
- Блок данных (внутри файла данных)
[AAAAQk]
- Строка (внутри блока)
[AAA]
Использование rowid - это самый быстрый способ физического нахождения любой строки водин блок чтения.Они используются внутри, но могут быть использованы непосредственно разработчиком.Поиск строки по первичному ключу приводит к одному (или нескольким) чтению индекса, чтобы найти идентификатор строки, а затем база данных найдет блок и извлечет строку.Если кто-то знает идентификатор строки, поиск индекса не требуется.
Сказав это, одним из столпов реляционных баз данных является то, что модель должна быть независимой от физического хранилища (без указателей).Кроме того, он позволяет конкретной реализации (из dbms) оптимизировать и прозрачно предоставлять дополнительные функции.
Каждый раз, когда вы используете rowid, Единорог умрет, и корма падает с небес.Например, если вы сжимаете таблицу или обновляете многораздельную таблицу (что приводит к перемещению строки в другой раздел), или вы перестраиваете таблицу, или экспортируете / импортируете таблицу, или ... или ... или ... rowid изменится.
В заключение: доступ на основе rowid не дает достаточных преимуществ по сравнению с обычным индексированным доступом, чтобы оправдать риск неизбежного сбоя.Знайте, что они существуют и кем они являются, но никогда не полагайтесь на них.