1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Alternative zu GENERATE ALWAYS?

Dieses Thema im Forum "DB2" wurde erstellt von Hubertus, 25 Oktober 2015.

  1. Hubertus

    Hubertus Fleissiger Benutzer

    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).
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
    Hubertus gefällt das.
  3. Hubertus

    Hubertus Fleissiger Benutzer

    Der Hersteller von DB2 ist IBM - der Marktführer beim Mainframe. DB2 gibt es aber auch unter Linux, Unix, Windows.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    ok ;-). Man hört dennoch selten was dazu.
     
    Hubertus gefällt das.
  5. akretschmer

    akretschmer Datenbank-Guru

    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?
     
  6. Hubertus

    Hubertus Fleissiger Benutzer

    Tabellen mit so einer Spalte sind generell langsamer. Wenn ich diese Spalte entferne, geht der INSERT ca. 10 Mal schneller.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    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.
     
    Hubertus gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden