Sven Rautenberg: JOIN dauert mehrere Minuten (Problem: fehlende FKs ?)

Beitrag lesen

Moin!

Ok hier das Create Statement:

Daran ist schon einiges zu kritisieren.

Allen voran: Du willst zwar Konstrukte wie Foreign Keys verwenden, aber das gelingt dir nicht, weil du MyISAM als Storage-Engine benutzt. MyISAM ist schnell, aber unterstützt viele Features nicht, die man gelegentlich haben will - darunter sowas wie Transaktionen, Trigger, Foreign Keys, Stored Procedures etc. Neben etlichen anderen Storage Engines bietet InnoDB diese Features an.

Aufgrund der falschen Storage Engine ist die Tabelle keys in deinem jetzigen Modell absolut funktionslos, und damit sinnlos. Abgesehen davon würde man sie vermutlich auch sonst nicht so realisieren.

Die alles entscheidende Frage ist: Woher kommen diese Keys, und was soll damit gemacht werden?

Tabelle keys:
keys
0001AF
000F19
001B9E

Vernünftig wäre, die Keys an dieser Stelle einer künstlichen ID zuzuordnen, die numerisch ist, und die überall sonst ausschließlich für die Zuordnung von Datensätzen zum Key genutzt wird.

Im übrigen sieht es so aus, als handele es sich hier um hexadezimale Zahlen. Die würde ich sowieso nie als String abspeichern, sondern immer als passenden INTEGER-Wert - je nach Wertebereich ggf. auch BIGINT, unsigned und ggf. mit passendem ZEROFILL.

Tabelle name:
id        value        key
1         Mustermann   0001AF
2         Huber        000F19
3         Huber jun.   000F19
4         Meier        001B9E

Tabelle ort:
id        value        key
1         Hamburg      0001AF
2         Berlin       000F19
3         Berlin       000F19
4         Dresden      001B9E

Warum ist 000F19 doppelt in beiden Tabellen?

Die Tabelle keys hab ich deswegen angelegt, um eine Tabelle zu haben, die alle keys genau einmal enthält.

Mangels der Funktion der Foreign Keys in MyISAM bringt dir das exakt garnichts zur Zeit.

- Sven Rautenberg