2012-03-24 9 views
2

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?

+0

Können Sie den Dateinamen und den Hash-Wert in der gleichen Tabelle umgestalten? –

+0

Ich bin vertraut mit Refactoring. Wie funktioniert der Prozess? – karamazov

+0

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

Antwort

1

Von den Anforderungen, die Sie beschreiben, ist die Tabelle sample_hash überhaupt nicht erforderlich.

Sie können die Hashes in der Tabelle sample_name beibehalten und alle Ihre Hash-Werte in dieser Tabelle nachschlagen.

+0

Ich muss beide Dateinamen und Hashes auf getrennten Tabellen behalten, weil ein Hash mehrere Dateinamen haben kann. In der Zwischenzeit habe ich die md5-Kolumne indiziert, wahrscheinlich ist die beste Option. – karamazov