Ich möchte eine Datenbank(abfrage) optimieren, denn bei einem Extremfall mit mehreren Million Datensätzen konnte die Seite fast nicht mehr geladen werden.
Die Tabelle sieht wie folgt aus:
ID bigint(20) UNSIGNED
type varchar(4)
home_island int(255)
action varchar(10)
start_time int(30)
time int(255)
action_id bigint(255)
since int(30)
island int(255)
[Es handelt sich um eine Tabelle für die Truppen eines Browsergames. Für jede Truppe wird ein Datensatz erstellt.]
Nun habe ich eine Funktion, die alle Truppen anzeigen soll, die sich auf einer Insel befinden. Bisher habe ich die gefragten Datensätze ausgelesen und in einem Array die Truppen gezählt. Das ist natürlich sehr Ressourcenfreundlich. Ich habe bisher noch nie mit Funktionen in Mysql gearbeitet, weil dies schlichtweg nicht nötig war.
Nun hatte ich sowas im Sinn: (Nach der Reihe die verschiedenen Typen abfragen)
Nur weiß ich nicht was ich summieren soll, ich brauche ja keine Spalte, jeder Datensatz zählt als 1. ***
Nun zum Aufbau der Tabelle. Bisher hatte ich zwei Systeme im Einsatz:
- Es werden mehrere Truppen in einem Datensatz zusammengefasst, solange alle Werte gleich sind. Falls sich die Truppenzahl für verschiedene Aktionen (Angreifen, Fischen gehen, etc…) nicht für einen Datensatz ausgehen, werden die Truppen des Datensatzes auf mehrere verteilt. Das führte aber zu vielen Fehlern und war sehr kompliziert…
- Jede Truppe hat einen eigenen Datensatz. Braucht natürlich viel Speicher un bringt lange Abfragen.
Wenn jemand noch eine andere Idee für ein System bzw für Optimierung hätte, wäre ich sehr dankbar!
[PS: Manche Begriffe mögen jetzt vielleicht nicht verstanden werden, is halt meine “Projektsprache”. Ich erkläre gern näher.]
Zusammengefasst: Es geht darum möglichst viele Datensätze möglichst speicherplatzarm und unkompliziert abzulegen und verwenden zu können.
*** Weiters verstehe ich nicht ganz, was bei dieser Abfrage rauskommt, wird da jeder Datensatz ausgegeben mit der Summe bisher, oder kommt da die schließliche Summe raus, etwa so (also eine Zahl):
$sql = "SELECT SUM() FROM `bla`";
$summe = mysql_query($sql);