Hallo,
Ich habe eine Tabelle in mysql, diese ist in laufe der Jahr
gewachsen und hat zurzeit über 180000 Einträge,
wenn ich mir dan den letzten Eintrag anzeigen lassen will
braucht mysql bald 3 Minuten bis es zur Verfügung steht
was kann ich außer eine Neue Tabelle anzulegen auf
sql ebene noch machen?
mfG
Somba
jahlives
16-08-2006, 15:15
Wie fragst du denn den Datensatz ab ? Gehst du in einer Schleife einfach alle durch und suchst nach deine Kriterien ?
$sql = "SELECT * FROM tabelle ORDER BY id DESC LIMIT 1";
Sollte nur den letzten Eintrag holen und sonst nichts.
Wie gesagt ohne deine Query zu kennen ist es irgendwie wie im trüben zu Fischen ;) Also etwas mehr Infos
Gruss
tobi
$erk = $datenbank->frage("select MAX(Erkennung) AS maximum from tabelle");
$erkennung = @mysql_result($erk,0,maximum);
for($i = 1;$i < 18;$i++) // --> Gruppen Schleife
{
for($b=0;$b<$service_anzahl[$i];$b++) // --> service pro Gruppe schleife
{
$gr_service = $datenbank->frage("select * from tabelle where Gruppe='$i' and Service='".$service[$i][$b]."' and Erkennung='$erkennung'");
$zeilen = mysql_num_rows($gr_service);
if($zeilen == 1)
{
$service_ausgabe = mysql_fetch_row($gr_service);
Variablen bearbeiten .........
mysql_free_result($gr_service);
}
else{}
} //--> service pro Gruppe Schleife Ende
}
Erkennung ist die ID für alle Eintrag der service die übertragen werden.
Also pro speicherung eine ID für alle Gruppen->Service.
Addiere die Werte in $service_anzahl, multipliziere diese mit 18 und du hast die Zahl, mit der du mit Select * auf die DB losgehst. Da wunderst du dich, wenn das langsam wird?
Gruß
Uwe
//--> mit 18 und du hast die Zahl, mit der du mit Select * auf die DB losgehst. Da wunderst du dich, wenn
wenn ich diese Abfrage mit einer leeren Tabelle mache ist die
Information innerhalb von zirka 20 Sekunden da, also kann es nicht an PHP
liegen sondern mysql hat da wohl ein Problem,
aus diesen Grund suche ich nach Alternativen Möglichkeiten meine
Alte Tabelle weiter zu behalten.
Original geschrieben von Somba29
wenn ich diese Abfrage mit einer leeren Tabelle mache ist die
Information innerhalb von zirka 20 Sekunden da
Auch das kann man ja nicht gerade als schnell bezeichnen. Da einem die Zusammenhänge fehlen und man keine Ahnung hat, was du da vorhast, kann man auch nicht helfen. Ich vermute aber mal, dass dein Datenbankdesign nicht gerade ideal ist, Stichwort Normalisierung
Gruß
Uwe
die 20 Sek war nur eine Schätzwert die Informationen werden
sehr schnell geliefert von Mysql zu php auch wenn 500 oder 1000
Einträge in der DB sind aber ab einen gewiesen Volumen der
Tabelle brauch mysql immer mehr Zeit die Information zu liefern
obwohl ich nur auf den Letzten Eintrag hinweise, es
muss doch eine mysql Statman geben was mysql schneller macht oder
ist da die Grenze von mysql?
die $service_anzahl hat so im durchschnitt 14 Service.
oder
ist da die Grenze von mysql?
schau dir mal an wieviele beiträge dieses forum hat. und lange muss man hier auf eine response nicht warten..oder?
jo, dir kann man so nicht helfen.
fakt ist, dass deine 18*x queries viel zu viele sind. vorallem wenn man bedenkt, dass du u.U. nur den letzten Eintrag haben willst.
Über dein DB Layout kann ich natürlich nichts sagen. Vermute aber ähnlich schlimm.
Select * ist natürlich auch überflüssig. hole nur die felder die du brauchst.
hast du schlüssel in der DB gesetzt?
ein fehlendes limit zeigt deutlich, dass du viel zu viele DS selektierst.
...