2016-07-19 8 views
0

So habe ich einrichten nur eine Datenbank, die nur eine Tabelle mit den folgenden Feldern gilt:SQL Query Geschwindigkeit und Raffinesse

key_value: hält 6-stelligen Code für einen Schlüssel

eingelöst: boolean für, wenn der Schlüssel eingelöst wird

redeemed_by: wer es

redeemed_date eingelöst werden: Name der Software t: wann wurde es

SOFTWARE_NAME eingelöst Der Schlüssel bezieht sich auf

Ich grundsätzlich mit einer leeren Datenbank und dann, wenn jemand über PayPal kauft, erhalten sie ihren eigenen Schlüssel und es wird der Datenbank hinzugefügt. Danach öffnen sie eine App, in der sie ihren Code eingeben können, der dann in der Datenbank gesucht und als eingelöst markiert wird, so dass sie nicht wieder verwendet werden kann - dies führt dazu, dass sowohl eingelöste als auch nicht eingelöste Codes in einer Tabelle liegen.

Wenn ich ein paar tausend Käufe erreichen würde, würde dies dazu führen, dass die Datenbank erheblich langsamer wird, vielleicht abstürzen? Was wäre, wenn es eine größere Zahl wäre, sagen wir 10.000?

Was genau wäre eine gute Lösung dafür, selbst wenn ich eine andere Tabelle der eingelösten Schlüssel hätte, müsste sie in der eingelösten Tabelle nachsehen, ob sie eingelöst wurde?

Danke für jede Antwort, ich lerne immer noch Datenbanken und SQL!

+2

Wenn Ihr MySQL Probleme mit 10.000 Datensätzen hat, führen Sie es auf einem stark überladenen und/oder zu wenig leistungsfähigen Rechner aus. Es gibt mysql-Instanzen mit buchstäblich Milliarden von Datensätzen. –

Antwort

1

Ich denke, Ihr Design ist solide. Je nachdem, welche Abfragen ausgeführt werden, möchten Sie möglicherweise Indizes hinzufügen. key_value klingt wie ein guter Primärschlüssel, der auch als Update-Index dienen würde.

Wie von Marc B bemerkt, ist die Hardware die einzige mögliche Überlegung für die Leistung.

1

Ich würde zwei Tabellen dafür verwenden: Eine für das, was Sie angegeben haben, aber eine andere als Archivtabelle mit einem Job, der regelmäßig über eingelöste/abgelaufene Datensätze migriert.

Begründung: Der Hauptzweck der Tabelle ist für Rücknahmen, nicht für die Verwendung als ein Archiv. Im Laufe der Zeit, wenn mehr und mehr eingelöste Datensätze in der Tabelle gefunden werden, wird die Leistung für Nachschlagevorgänge nicht eingelöster Datensätze immer schlechter und schlechter wegen des "Totholzes" in der Tabelle. (Denken Sie, eBay beherbergt alle aktiven und abgeschlossenen Auktionen in einer Tabelle?)

Wenn Sie immer noch eine "One-Table" -Lösung benötigen, können Sie problemlos eine Ansicht erstellen, die die beiden Tabellen zusammenführt.

Wenn Sie einen richtigen Primärschlüssel einrichten, wird sich die Leistung (für eine Weile) nicht schnell verschlechtern, da dies Tabellenscans überflüssig machen würde, auf die Sie bei steigenden Datensatzvolumina anspielen.