Fra konceptvejledningen :
Den største ulempe ved en ROWID er, at selvom den normalt er stabil, kan den ændre sig under nogle omstændigheder:
- Tabellen er genopbygget (
ALTER TABLE MOVE
...) - Eksporter/Importer naturligvis
- Partitionstabel med aktivering af rækkebevægelse
En primær nøgle identificerer en række logisk , vil du altid finde den rigtige række, også efter en slet+indsæt. En ROWID identificerer rækken fysisk og er ikke så vedvarende som en primær nøgle.
Du kan trygt bruge ROWID i en enkelt SQL-sætning, da Oracle vil garantere, at resultatet er sammenhængende, for eksempel for at fjerne dubletter i en tabel. For at være på den sikre side vil jeg foreslå, at du kun bruger ROWID på tværs af erklæringer når du har en lås på rækken (VÆLG ... TIL OPDATERING).
Fra et præstationssynspunkt er den primære nøgleadgang en smule dyrere, men du vil normalt kun bemærke dette, hvis du bruger meget enkeltrækkeadgang. Hvis ydeevnen dog er kritisk, kan du normalt få større fordele i så fald ved at bruge sæt-behandling end enkeltrække-behandling med rowid. Især, hvis der er mange rundrejser mellem DB'en og applikationen, vil omkostningerne ved rækkeadgang sandsynligvis være ubetydelige sammenlignet med omkostningerne for rundrejser.