I mit 2 Tischen eine MySQL DB haben:MySQL Tabellen Beziehung und die Verwendung von md5 Hash
- sample_name (speichert Namen einer Datei, mehrere Namen für die gleichen sample_hash);
- sample_hash (speichert die Hashes einer Datei, speichert nicht doppeltes MD5);
(alle Tabellen haben eine id
int unsigned NOT NULL auto_increment)
Meine erste Option, diese beiden Tabellen zu beziehen ist durch eine md5 Spalte in beiden Tabellen erstellen und sie beziehen. Dies scheint jedoch einen Nachteil zu haben, da ich ein varchar (32) duplizieren werde, was mit Millionen von Datensätzen eine Platzverschwendung sein kann.
Meine zweite Option besteht darin, zuerst die Datei-Hashes zu berechnen, die mysql_insert_id()
der Tabelle sample_hash zu nehmen und in die Tabelle sample_name einzufügen. Dies ist sinnvoll, wenn der Hash in der Tabelle sample_hash neu ist, also habe ich die Variable mysql_insert_id()
zur Verfügung.
Aber wenn der Hash bereits in der Samples_db existiert, möchte ich den Hash nicht noch einmal speichern, so dass ich keine mysql_insert_id()
haben werde.
Gibt es eine andere Alternative als die ID eines gegebenen md5 zu suchen, um sie in der Tabelle samples_name zu speichern, falls der md5 bereits existiert? Wenn ja, wie kann ich das tun?
Können Sie den Dateinamen und den Hash-Wert in der gleichen Tabelle umgestalten? –
Ich bin vertraut mit Refactoring. Wie funktioniert der Prozess? – karamazov
Ich weiß nicht genau, wie Sie das tun können, aber haben Sie bereits alle Felder optimiert? Ich denke an einen eindeutigen Index für den Hash auf 'sample_hash' und einen einfachen Index für die andere Tabelle. Das Feld sollte vom Typ char (32) sein. Wenn Sie keine Lösung finden, um die Suche zu vermeiden, zumindest auf diese Weise wird es ein wenig schneller – haltabush