Alternative zu GENERATE ALWAYS?

Hubertus

Fleissiger Benutzer
Beiträge
57
Eine Tabelle mit einer Spalte, die mit GENERATED ALWAYS AS IDENTITY deklariert ist, zeigt beim INSERT eine dramatisch schlechte Performance.

Gibt es eine Alternative dazu? Es soll also in einer Tabelle eine Spalte deklariert werden, die beim INSERT automatisch mit Werten gefüllt wird (nicht unbedingt lückenlos oder aufsteigend).
 
Werbung:
Das scheint mir etwas wie unter PG ein Serial - Feld zu sein - eine Alternative dazu wüßte ich nicht.

Darf ich mal fragen, wer eigentlich warum heute DB2 verwendet? Wird das eigentlich noch weiterentwickelt? Sonderlich viel hört man dazu ja nicht.
 
wie stellt sich das Problem dar? Sind Tabellen mit so einer Spalte generell langsammer, oder trifft das nur eine spezielle? Falls lezteres: kannst Du andere Ursachen (z.B. andere Spalten, Datentypen, Trigger, ...) als Ursache ausschließen?
 
Tabellen mit so einer Spalte sind generell langsamer. Wenn ich diese Spalte entferne, geht der INSERT ca. 10 Mal schneller.
 
Werbung:
Nun, dann ist das ein Implemntierungsproblem. Immerhin muß das ja so programmiert werden, daß es transaktionssicher ist und auch bei vielen gleichzeitigen Zugriffen (also Inserts) funktioniert. Da sind Locks nötig. Das folgende ist jetzt nicht ganz repräsentativ als Check:

Code:
test=*# create table bla(i int);
CREATE TABLE
Time: 0,765 ms
test=*# insert into bla select * from generate_series(1,100000) x;
INSERT 0 100000
Time: 167,892 ms
test=*# drop table bla;
DROP TABLE
Time: 0,442 ms
test=*# create table bla(i serial);
CREATE TABLE
Time: 1,728 ms
test=*# insert into bla select * from generate_series(1,100000) x;
INSERT 0 100000
Time: 182,354 ms

Hab das mehrfach gemacht, teilweise waren die Zeiten für Serial sogar günstiger ;-)

Will sagen: dafür, daß die DB zu garantieren hat, das die Werte in der Spalte gemäß der erwarteten Eigenschaften (unique) valide sind, muß man irgendwo auch akzeptieren, daß damit Aufwand verbunden ist. Mein Test ist insofern für den Eimer, weil dieser Aufwand gemessen an den anderen Aufwänden, z.B. Transaktionslog schreiben, eher marginal ist.
 
Zurück
Oben