2017-10-26 4 views
0

Welche ID-Generierungsstrategien werden von Oracle 12c unterstützt?Von Oracle 12c unterstützte ID-Generierungsstrategie

Und welche ID-Generation Strategie ist am besten zu verwenden/mit bester Leistung?

Ich war Beitrag über ID Generation Lesen: http://sadalage.com/blog/2017/06/12/id-generation/

und wollte, wenn prüfen ist wahr, dass IDENTITY Id Erzeugungsstrategie in Bezug auf Rundreisen DB wirklich Nachteile hat, wie beschrieben oder Optimierer kann dies verhindern?

+0

"GENERATED AS IDENTITY" erfolgt direkt in der Datenbank, wenn ein Datensatz eingefügt wird, so dass es keine Datenbank-Roundtrips beinhaltet. –

Antwort

1

Es gibt keinen Overhead in der Datenbank verursacht durch Identitätsspalten. Ich denke, einige der Behauptungen in diesem Artikel sind fehlerhaft. Die Aussage:

„Identität ID Generation nicht Vorbelegung nicht unterstützt, erfordert so eine Auswahl nach jedem Einsatz“

könnte für die ORM, aber es ist sicherlich nicht wahr, von der Datenbank wahr sein. Die meisten Datenbanken unterstützen die RETURNING-Klausel, so dass der erzeugte Wert von einer Identitätsspalte ist trivialerweise als Teil des Einsatzes abgerufen, das heißt:

insert into MY_TABLE 
values (...) 
returning ID_COLUMN into :my_host_variable 

so klingt es eher wie sie für eine ORM entscheiden, die keine ausreichende macht Job.

Auch die Aussage

„In Oracle12c Abwurf von Tabellen nicht die Sequenz mit der Identität zugeordnet Drop Spalte abgestanden Sequenzen in der Datenbank zu verlassen“

ist trivialerweise gezeigt, falsch zu sein:

SQL> create table t (x int generated as identity); 

Table created. 

SQL> select sequence_name from user_sequences; 

SEQUENCE_NAME 
-------------------------------------------------------- 
ISEQ$$_159461 

SQL> drop table t purge; 

Table dropped. 

SQL> select sequence_name from user_sequences; 

no rows selected. 

, die auch dazu dient zu demonstrieren, dass IDENTITY-Spalten (in Oracle) sowieso als Sequenzen implementiert sind. So

„Wenn die Datenbank-Features bietet Sequenzen zu verwenden, sie verwendet werden sollen. In Datenbanken, die bieten keine Sequenzen Identitätsspalten verwendet werden müssen“

ist eine fragwürdige Behauptung.

+0

Danke für diese Info. Denken Sie, dass die Strategie mit Identity ID Generation eine der besten in Bezug auf Performance und nicht viele Nachteile ist oder würden Sie eine andere Strategie für die ID-Generierung vorschlagen? – Joe

+0

Ich kann nur zu Oracle kommentieren, aber Sequenzen oder Identitätsspalten sind ziemlich gleichwertig. Eine gute Implementierung wird entweder mit einem einzigen Aufruf unter Verwendung von RETURNING wie oben beschrieben bereitgestellt. Eine schlechte Umsetzung wird zwei Reisen egal sein, welche Methode Sie verwenden entweder: 1 Reise-Sequenznummer 1 Reise zu bekommen, den Einsatz oder 1 Reise zu tun um den Einsatz 1 Reise zu tun, um wieder liest die Zeile, um die generierte ID zu erhalten Entweder sind offensichtlich nicht so gut wie eine Reise. –

Verwandte Themen