Ich bin ein ziemlich neuer Entwickler MySQL und fange an einem Projekt, das ich mit ein bisschen Erstberatung tun könnte auf ...MySQL Datenbank-Design Optimiert für Datenbeschaffung in PHP
Ich erstelle eine Datenbank, wird in erster Linie eine bestimmte Anzahl von Items (zwischen 1-5k) und etwa 40 booleschen Variablen, die mit jedem verknüpft sind. Benutzer geben dann ihre Auswahl dieser 40 Werte ein, und es ist die Aufgabe des Systems, die "besten" übereinstimmenden Elemente zu bestimmen. Dies können Elemente sein, die mit allen 40 Variablen übereinstimmen, oder, falls keine vorhanden sind, diejenigen, die 39 usw. entsprechen.
Also, ein paar Fragen, wenn jemand Zeit hat!
- Aus meiner Erfahrung mit MySQL gibt es keinen signifikanten Geschwindigkeitsvorteil bei der Aufteilung von Daten in separate Tabellen für eine Datenbank dieser Größe. Die Gemeinkosten für mehr Tabellen sind einfach zu groß, um einen brauchbaren Unterschied für die Gesamtleistung zu machen. Daher würde ich vorschlagen, einfach eine große Tabelle mit 40 Spalten und bis zu 5000 Zeilen zu erstellen, um alle Informationen zu speichern (Tabellensperren sind kein Problem, da alle Abfragen SELECT sind). Passt das zum Denken und zur Erfahrung anderer?
- Was wäre der effizienteste Weg, das beste Spiel zurückzugeben? Ist das überhaupt möglich durch Datenbankstruktur und SQL-Befehle allein oder werde ich einfach das gesamte Array nach PHP zurückgeben und eine Form der heuristischen Funktion ausführen, um dort die besten Übereinstimmungen zu ermitteln?
Danke für Ihre Zeit & Hilfe!
Wenn Sie diese Route gehen, können Sie auch "negative Übereinstimmungen" mit einem äußeren Join und "IS NULL" in den 'WHERE' -Klauseln zählen; Trotzdem denke ich, dass es im Vergleich zu dem von mir vorgeschlagenen BIT_COUNT etwas umständlich ist. –