Brauche einen Tipp um MySQL Abfrage zu beschleunigen

Der MySQL Datenbank-Server für Internet- und Intranet-Lösungen.

Brauche einen Tipp um MySQL Abfrage zu beschleunigen

Beitragvon Hary74656 » Sa 23 Mär, 2013 10:13

Hi,

Wollte mal fragen ob jemand mir einen Tipp geben kann wie ich die folgende Abfrage ein wenig oder auch etwas mehr beschleunigen kann:

Code: Alles auswählen
$abfrage = "SELECT `servername` as `srvname`, `servername`,
(SELECT COUNT(status) FROM `serverstatis` WHERE `status` = 1 AND `servername` LIKE `srvname`) as ok,
(SELECT COUNT(status) FROM `serverstatis` WHERE `status` = 0 AND `servername` LIKE `srvname`) as full
from `serverstatis`
GROUP BY `servername`
order by `ok` DESC";


Die Tabelle serverstatis selbst enthält die Felder:
id
servername
status
time

Konkret mache ich damit folgendes, ich frage alle Stunden den Serverstatus der SimCity Server ab und speichere diese mit 1 & 0 in der DB ab, also 1 fĂĽr VerfĂĽgbar und 0 fĂĽr voll.
Mit diesen Werten berechne ich dann mit einem Punktesystem welcher Server am besten/meisten VerfĂĽgbar is.

Grundsätzlich funktioniert es mit der Abfrage auch.
Allerdings beschäftigt das den sql Server dermaßen, dass er extrem lange braucht um das zu verarbeiten. Sind nämlich momentan um die 15.000 Datensätze die er durchackern muss.

Wäre für jede Hilfe dankbar, ich steh nämlich an, weil ich nicht sehe wie ich die Abfrage "tunen" kann.

Hier kann man es sich live ansehen:
http://simcity.weavernet.at/index.php << zeigt die aktuellen Statis an und speichert diese auch gleich in der DB
http://simcity.weavernet.at/serverperformance.php << hier wird besagte Abfrage ausgefĂĽhrt

LG
Hary
Hary74656
Senior Board-Mitglied
Senior Board-Mitglied
 
Beiträge: 274
Registriert: Di 21 Feb, 2006 23:52

Re: Brauche einen Tipp um MySQL Abfrage zu beschleunigen

Beitragvon derFlo » Sa 23 Mär, 2013 10:32

Ich würd mal sagen, dass das LIKE nicht wirklich positiv zur Performance beiträgt...
derFlo
Board-User Level 3
Board-User Level 3
 
Beiträge: 1481
Registriert: Mo 14 Jul, 2008 11:35
Wohnort: Graz

Re: Brauche einen Tipp um MySQL Abfrage zu beschleunigen

Beitragvon pc_net » Sa 23 Mär, 2013 13:21

du fragst die gleiche tabelle 3x ab und gruppierst/sortierst dann auch noch das ergebnis ...

1. schritt: wie schon von derFlo erwähnt, zuerst möglichst mal das LIKE ersetzen

2. schritt: Index auf die spalte "Servername" anlegen
No hace falta ser un genio para saber quién dijo eso.

Magenta Gigakraft 250/50
pc_net
Profi-User
Profi-User
 
Beiträge: 1572
Registriert: Fr 29 Aug, 2003 21:21

Re: Brauche einen Tipp um MySQL Abfrage zu beschleunigen

Beitragvon Fretful » Mi 27 Mär, 2013 13:42

Also ich wĂĽrd auf die joins verzichen...

Code: Alles auswählen
SELECT
servername,
sum(case when status = 1 then 1 else 0 END) as ok,
sum(case when status = 0 then 1 else 0 END) as voll
from serverstatis
group by servername
order by ok desc



LG
Fret
A1 Glasfaser 500/100
Fretful
Board-Mitglied
Board-Mitglied
 
Beiträge: 199
Registriert: So 23 Mai, 2004 12:43

Re: Brauche einen Tipp um MySQL Abfrage zu beschleunigen

Beitragvon Hary74656 » Do 28 Mär, 2013 23:04

Fretful hat geschrieben:Also ich wĂĽrd auf die joins verzichen...

Code: Alles auswählen
SELECT
servername,
sum(case when status = 1 then 1 else 0 END) as ok,
sum(case when status = 0 then 1 else 0 END) as voll
from serverstatis
group by servername
order by ok desc



LG
Fret


Excelent!
Ein herzliches Danke fĂĽr die Tipps! Und speziell an Fretful :ok:

http://simcity.weavernet.at/serverperformance.php wird jetzt in <1 Sekunde geladen 8-)
Hary74656
Senior Board-Mitglied
Senior Board-Mitglied
 
Beiträge: 274
Registriert: Di 21 Feb, 2006 23:52


ZurĂĽck zu MySQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste