Aus dem Konzeptleitfaden :
Der Hauptnachteil einer ROWID ist, dass sie zwar normalerweise stabil ist, sich aber unter bestimmten Umständen ändern kann:
- Die Tabelle wird neu aufgebaut (
ALTER TABLE MOVE
...) - Offensichtlich exportieren / importieren
- Partitionstabelle mit aktivierter Zeilenverschiebung
Ein Primärschlüssel identifiziert eine Zeile logisch finden Sie immer die richtige Zeile, auch nach einem Löschen+Einfügen. Eine ROWID identifiziert die Zeile physisch und ist nicht so persistent wie ein Primärschlüssel.
Sie können ROWID sicher in einer einzelnen SQL-Anweisung verwenden, da Oracle garantiert, dass das Ergebnis kohärent ist, um beispielsweise Duplikate in einer Tabelle zu entfernen. Um auf der sicheren Seite zu sein, würde ich vorschlagen, dass Sie nur die ROWID cross-Anweisungen verwenden wenn Sie eine Sperre auf der Zeile haben (SELECT ... FOR UPDATE).
Aus Performance-Sicht ist der Primärschlüssel-Zugriff etwas teurer, aber Sie werden dies normalerweise nur bemerken, wenn Sie viele einzelne Zeilenzugriffe durchführen. Wenn die Leistung jedoch kritisch ist, können Sie in diesem Fall normalerweise einen größeren Nutzen aus der Verwendung der Set-Verarbeitung ziehen als die Verarbeitung einzelner Zeilen mit rowid. Insbesondere wenn viele Roundtrips zwischen der Datenbank und der Anwendung stattfinden, sind die Kosten für den Zeilenzugriff im Vergleich zu den Roundtrips-Kosten wahrscheinlich vernachlässigbar.