2016-10-05 2 views
0

Angenommen, ich habe zwei Szenarien mit derselben Datenmenge, z. B. eine Tabelle mit 500 Zeilen. Zuerst verwende ich eine Abfrage, um partitionierte MySQL-Tabelle abzufragen, und lassen Sie den Rest der Logik zu MySQL-Engine, um mein Ergebnis zu erhalten.Leistungsunterschied zwischen nativer MySQL-Partitionierung und Back-End-basierter Partitionierung?

Im zweiten Fall erstelle ich 5 Tabellen mit maximal 100 Zeilen. ich dann durchqueren programmatisch diese Tabellen, bis der Datensatz gefunden wird, wie diese (Pseudocode):

fetchedData = query table1 
if fetchedData == null 
    fetchedData = query table2 
    if fetchedData == null 
      ... 
     fetchedData = query table5 

Der Hauptnachteil hier ich sehe, ist, dass ich möglicherweise 5mal abfragen Datenbank anstelle von 1, je nachdem in welcher Tabelle Der Datensatz wird gespeichert. Aber da die Abfragen kleiner und zielgerichteter sind, sollten sie mir eine schnellere Antwortzeit geben. Oder sollte ich es einfach der MySQL-Partitionierung überlassen? Und lassen Sie uns im zweiten Fall auf die Wartbarkeit verzichten.

+0

Wie immer mit Leistungsfragen, ** gibt es keine richtige Antwort **. Dies hängt stark von Ihren Daten, Ihrer Hardware und Ihren Lastmustern ab. Sie müssen einen eigenen Benchmark erstellen und umfassend testen, welche Hardware Ihnen zur Verfügung steht. Je näher an der Produktions-Hardware, desto besser. Wenn es wirklich die Produktions-Hardware ist, fantastisch. – tadman

+0

Das heißt, Sie möchten wahrscheinlich mit Datenbank-Einbauten gehen, bevor Sie gehen und etwas Eigenes zusammenhacken. Sie tun das nur, wenn Sie keine andere Möglichkeit haben. – tadman

+0

@tadman - Dort _ist_ eine richtige Antwort. Es variiert nicht mit Daten/Hardware/Last. _Nein_ Partitionierung ist von _nan_ Vorteil für das gegebene Szenario. –

Antwort

1

Weder.

500 Zeilen ist trivial. Selbst wenn MySQL Dinge parallel machen könnte, würde es keinem helfen.

Verwenden Sie einen geeigneten Index - Oft hilft das enorm.

Ihr bestimmter Pseudocode ist nicht besser als das, was mit einer MySQL-Abfrage mit einem LIMIT 1 am Ende getan werden kann, um die Abfrage zu stoppen, bevor alles gescannt wird. Also, noch einmal, ich sage "keine Art von Partitionierung wird überhaupt helfen".

Verwandte Themen