PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zur Tabellenstruktur bei MySQL


Jonas
06.04.2002, 21:12
So, hab mich jetzt mal durch die Optimierungs-Kapitel der MySQL-Doku für die Tabellenstruktur durchgearbeitet.

Also wenn ich das richtig verstanden hab, sollte folgendes beachtet werden:
- Alles auf NOT NULL setzen. Wozu brauchts das NULL eigentlich überhaupt? Als default-Wert dann praktisch ´´ angeben?
- Eine Spalte mit INT, und auto_increment, und INDEX, und als PRIMARY KEY definieren, damit ich z.B. anhand von dem Feld löschen oder editieren kann
- Alle Spalten, die in der WHERE-Bedingung einbezogen werden können/sollen, sollten ein INDEX sein.
Hab ich das so richtig verstanden?

Also als Beispiel:

CREATE TABLE test (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
masterid VARCHAR(10) NOT NULL DEFAULT ´´,
name VARCHAR(100) NOT NULL DEFAULT ´´,
vorname VARCHAR(100) NOT NULL DEFAULT ´´,
dsl INT(1) NOT NULL DEFAULT ´´,
PRIMARY KEY (id),
KEY id(id),
KEY masterid(masterid)
);

Also id soll dazu da sein, um z.B. beim editieren oder löschen genau die Zeile zu wissen, masterid, danach soll z.B. ausgelesen werden, also Usergruppe oder sowas ;)
name, vorname sollen die halt eingetragen werden. ich habe bei der doku gesehen, daß die für name z.B. auch CHAR(100) nehmen, wieso? Was passiert, wenn der Name kürzer is?
Und bei dsl soll halt 1 oder 0 rein, je nachdem ob sie dsl haben oder net (oder halt irgendwas anderes, is ja egal ;))

Also is das so richtig, oder lässt sich da noch was verbessern?

MfG


sami
06.04.2002, 23:16
mit NOT NULL bin ich ned wirklich einverstanden
wenn es felder gibt, die NULL sein dürfen aus deiner bzw aus programmsicht, dann setz die ruhig auf NULL, das braucht dann weniger speicherplatz.

Jonas
06.04.2002, 23:21
Jo, so dachte ich auch, aber in der Doku steht:

Declare columns to be NOT NULL if possible. It makes everything faster and you save one bit per column. Note that if you really need NULL in your application you should definitely use it. Just avoid having it on all columns by default.

Deswegen...oder hab ich da was falsch verstanden?

mhm, ich seh grad, mit dem EXPLAIN kann man auch sehr viel machen, wenn man Daten aus mehreren Tabellen abfragt, kann man dann gut optimieren...