[mysql,innodb]Interval für spalte? Insert-befehle langsam?

Bububoomt

ohne Vertrauen
ID: 10361
L
28 April 2006
19.666
769
Gibt es die möglichkeit bei einer Spalte ein interval zuzulassen?
Also nur werte von 0-50? Soll mit Constrains oder Check gehen??
Enum wäre noch ne möglichkeit aber nicht da wahre...

zudem habe das Problem, das knapp 30k Insertbefehle > 20 min. dauern. Dabei habe ich ein teil bereits auf Valus (1,2,3),(2,3,4),(3,4,5)... verkürzt, bei denen das ging. kann es wegen Foregnkeys so langsam sein??
 
Code:
[FONT=Courier New][B][COLOR=#9932cc]CREATE[/COLOR][/B] [B][COLOR=#9932cc]TABLE[/COLOR][/B] foo (
  value [B][COLOR=#9932cc]INT[/COLOR][/B](11) [B][COLOR=#9932cc]NOT[/COLOR][/B] [B][COLOR=#9932cc]NULL[/COLOR][/B]
  [B][COLOR=#9932cc]CHECK[/COLOR][/B] (value >= 0 [B][COLOR=#9932cc]AND[/COLOR][/B] value <= 50)
);[/FONT]
Zudem wird die Klausel CHECK von allen Speicher-Engines erkannt, aber ignoriert.
Quelle: https://dev.mysql.com/doc/refman/5.1/de/create-table.html

Bringt dir also in MySQL leider nix und du musst selber prüfen, bevor du ungültige Daten einträgst.
 
ok, also einzige möglichkeit da von der db machen zu können wäre ein Constraint und in ner anderen Tabelle alle Werte von 0-50 einzugeben. Bei int kein problem, bei double schon.

Und hast ne Idee wieso das einfügen so lange dauert?
 
könnte ja auch an dem server liegen, wo das drauf läuft. wenn ich auf meinem laptop hier 30k inserts in einer schleife mache, komme ich deutlich unter 20 min, sind aber auch nur 3 tabellenfelder drin (2 davon fremdschlüssel).

stumpi
 
@ice-breaker
Dachte das ihr vielleicht allgemeindes sagen könnt. Was ich gelesen habe verlangsamt ein Index das einfügen von vielen Datenmengen. Kann mir vorstellen, dass es auch länger dauert, wenn die DB Constraints prüfen muß.

Aufbau:
T1
S(PK) Char,Name

T2
S(FK T1.S +PK),NR(PK),typ,x,y,z

T3
ID(Autoincr.), S (FK T2.S),Von(FK T2.NR),Bis(FK T2.NR),R

T4
AID(Autoincr.), ID (FKT3.ID),x,y,z,x2,y2,y3

T2,T3,T4 werden befüllt
Sind nur Ints und Char werte knapp 3,5 MB Daten.
Jeweils knapp 10k Zeilen, wobei Zeilen von T4>T3>T2.

Haffe das sind die Infos mit dnen man mehr anfangen kann.

Das es Innodb ist hatte ch ja schon gesagt. (Laptop ist recht neu).

Hatte es mit Blöcken von bis zu 1 mio zeichen (ca. die max änge des packetes) und mit blöcken von bis zu 35k zeichen versucht. Bei 35k zeichen an die DB zu senden, war schneller als 1 mio zeichen.
 
Habe nur die PK und FK die nötig sind, weitere Indexe habe ich so nicht. FK kann ich ja nicht wegnehmen, da sonst fehlerhafte Daten eingefügt werden (es sind auch fehlerhafte Testdaten, die ich einfügen muß).

hmm, mit db4o dauerts auch gerade extrem lange, wobei ich hier gar keine Erfahrung habe was schnell oder langsam wäre.

Ich werds mal ohne PK und FK testen, was dann passiert bzgl Zeit.