Из концептуального руководства :
Физические строки обеспечивают максимально быстрый доступ к строке данной таблицы. Они содержат физический адрес строки (вплоть до определенного блока) и позволяют извлекать строку в единый блок доступа. Oracle гарантирует, что пока строка существует, ее rowid не изменится.
Основной недостаток ROWID заключается в том, что, хотя он обычно стабилен, он может измениться при некоторых обстоятельствах:
- Стол перестроен (
ALTER TABLE MOVE
...)
- Экспорт / Импорт очевидно
- Таблица разделов с включенным перемещением строк
Первичный ключ идентифицирует строку логически , вы всегда найдете правильную строку, даже после удаления + вставки. ROWID идентифицирует строку физически и не является таким же постоянным, как первичный ключ.
Вы можете безопасно использовать ROWID в одном операторе SQL, поскольку Oracle гарантирует, что результат будет согласованным, например, для удаления дубликатов в таблице. Чтобы быть в безопасности, я бы посоветовал вам использовать ROWID accross операторов , когда у вас есть блокировка строки (SELECT ... FOR UPDATE).
С точки зрения производительности доступ к первичному ключу немного дороже, но вы, как правило, заметите это, только если у вас много однострочного доступа. Однако, если производительность критична, вы, как правило, можете получить большую выгоду от использования обработки множеств, чем обработка одной строки с rowid. В частности, если между базой данных и приложением много циклов, стоимость доступа к строкам, вероятно, будет незначительной по сравнению со стоимостью циклов.