MySQL Daten // SQL-Statements optimieren

resterampe

Mitglied
Guten Morgen!

Ich habe mir ein kleines Datenbank-system gebaut. Welches auch mehreren normalisierten Tabellen beruht und diese über Joins / Left Joins abruft.

Die Ausgabe erfolg dann direkt über PHP oder als EXCEL via Spreadsheet Excel Writer.

Eine Typische Abfrage bei mir sieht wie folgt aus:
PHP:
$result2 = mysql_query ("SELECT `p`.*, `pmp`.* FROM `produkte_maschinen_parameterwerte` AS `pmp` LEFT JOIN `parameterwerte` AS `p` ON `pmp`.`FID_Parameterwerte` = `p`.`ID_Werte` WHERE `pmp`.`FID_Produkte` = '".$ID_Produkte."' AND `pmp`.`FID_Maschinen` = '".$ID_Maschinen."' ORDER BY `p`.`TimeStamp` DESC LIMIT 0, 20;");

Die ID_xxx Spalten haben das Atribut PRIMARY
und die Spalte TimeStamp hat das Attribut INDEX

Was kann ich machen um die Performance der Abfrage zu steigern?:confused:
Mit :rtfm: und:google: bin ich leider zu keinem für mich Aussagekräftigen Ergebnis gekommen.

Vielen Dank
Julian
 
Meine Nachforschungen haben ergeben, dass es Sinn macht die Felder die in den WHERE -Bedingungen abgefragt werden als INDEX zu setzen...
sofern diese nicht UNIQUE oder gar PRIMÄR sind.

Grundsätzlich gilt:
PRIMÄR ist etwas mehr als UNIQUE ist etwas mehr als INDEX
und alle haben in bezug auf die Geschwindigkeitsoptimierung die gleiche Wirkung

Gibt es dazu noch weitere Ergänzungen oder Verbesserungen
 
Wie bereits erwähnt wird pro Abfrage nur 1 Index benutzt. Man kann aber auch einen Index setzen der mehrere Spalten umfasst.
Zuviele Indizes sind kontraproduktiv, außerdem sollte klar sein, dass ein Index einige Abfragen auf der Datenbank beschleunigen kann, es aber 100% sicher ist, dass er jedes Insert/Update verlangsamt.

Für die Optimierung mit MySQL finde ich EXPLAIN unverzichtbar.
Hier mal ein Blogeintrag zum Thema: http://phpperformance.de/langsame-mysql-statements-finden-und-analysieren/
 
Zurück