Ich muss damit beginnen, dass ich keineswegs ein Datenbankexperte bin. Ich weiß, wie ich Programmieranwendungen in mehreren Sprachen erlerne, die Datenbank-Backends erfordern, und bin relativ vertraut mit MySQL, Microsoft SQL Server und jetzt MEMSQL - aber wiederum kein Experte für Datenbanken, daher wird Ihr Input sehr geschätzt.MEMSQL vs. MySQL
Ich habe an der Entwicklung einer Anwendung gearbeitet, die verschiedene Tabellen referenzieren muss. Ein sehr einfaches Beispiel für ein Problem, das ich vor kurzem hatte, ist, ich habe zu:
- Auf einer täglichen Basis, Pull-Down-600K bis 1M Datensätze in eine temporäre Tabelle.
- Vergleichen Sie, was sich zwischen diesem neuen Daten-Pull und dem alten geändert hat. Notieren Sie diese Informationen in einer separaten Tabelle.
- Reparieren Sie die Tabelle mit den neuen Datensätzen.
Lauf # 2 ist eine Abfrage wie:
SELECT * FROM (NEW TABLE) LEFT JOIN (OLD TABLE) ON (JOINED FIELD) WHERE (OLD TABLE.FIELD) IS NULL
In diesem Fall bin ich die beiden Tabellen auf einem bestimmten Feld zu vergleichen und dann die Informationen des Ziehens, was sich geändert hat.
In MySQL (v5.6.26, x64), meine Abfrage Timeout. Ich verwende 4 vCPUs und 8 GB RAM, aber beachte, dass der Rest meiner Konfiguration die Standardkonfiguration ist (habe keine Parameter verändert).
In MEMSQL (v5.5.8, x64), meine Abfrage läuft in etwa 3 Sekunden auf den ersten Versuch. Ich führe genau die gleiche virtuelle Serverkonfiguration mit 4 vCPUs und 8 GB RAM aus, beachte auch, dass der Rest meiner Konfiguration die Standardkonfiguration ist (habe keine Parameter verändert).
Auch in MEMSQL, ich führe eine Einzel-Knoten-Konfiguration. Das Gleiche gilt für MySQL.
Ich liebe die Tatsache, dass die Verwendung von MEMSQL mir erlaubt, mein Projekt weiter zu entwickeln, und ich stoße auf noch größere Kreuztabellenkalkulationsabfragen und Ansichten, die ich laufen lassen kann, die fantastisch auf MEMSQL laufen ... aber, in eine ideale Welt, würde ich MySQL verwenden. Ich bin bereits auf die Tatsache gestoßen, dass ich eine andere Reihe von Werkzeugen verwenden muss, um meine Instanz zu verwalten (zB: MySQL Workbench funktioniert relativ gut mit einem MEMSQL Server, aber ich muss Ansichten und Tabellen mit der Open Source SQL Workbench erstellen der mysql-java-adapter Das selbe für die Benutzung des Visual Studio MySQL-Connectors funktioniert, kann aber manchmal schmerzhaft sein, aus irgendeinem Grund kann ich Abfragen hinzufügen, kann aber keine Tabellenadapter hinzufügen) ... sorry, ich werde eine separate einreichen Frage dazu :)
Betrachtet man beide virtuellen Maschinen sind genau die gleiche Konfiguration und SSD gesichert, kann mir jemand irgendwelche Empfehlungen geben, wie meine MySQL-Instanz zu optimieren große Abfragen wie die oben auf MySQL zu optimieren? Ich verstehe, dass ich auch eine In-Memory-Datenbank erstellen kann, aber ich habe gelesen, dass es einige Persistenzprobleme geben könnte, nicht sicher.
Vielen Dank!
Ist das verbundene Feld in beiden Tabellen indiziert? (Wenn es in einem zusammengesetzten Index ist, ist es das erste Feld des Index?) – Uueerdo
Hi Uueerdo, nein die verbundenen Felder sind nicht indiziert. Danke, ich werde diese als Indizes hinzufügen und sehen, ob es hilft! – JDA