Vinzenz Mai: MYSQL Sorting for group beschleunigen

Beitrag lesen

Hallo,

es ist nur eine Tabelle beteiligt also kein Join. Mein Select sieht wie folgend aus:

SELECT * FROM daten WHERE 1_min <=60 AND 1_max >=60 AND 2_min <=30 AND 2_max >=30 AND 3_min <=15 AND 3_max >=15 AND 4_min <=60 AND 5_max >=60 GROUP by produkt_id ORDER BY preis ASC

  
und was erhoffst Du Dir für Daten?  
  
Solch ein Statement wird von jedem mir bekannten Datenbankmanagement außer MySQL als fehlerhaft zurückgewiesen. Standard-SQL verlangt, dass nach jeder Spalte, auf die keine Aggregatsfunktion angewandt wird, gruppiert wird. MySQL hat hier eine Optimierung eingebaut, die in dem Fall greift, dass die Daten innerhalb der Gruppierung in nicht aggregierten Spalten gleich sind. Dann und sinnvollerweise \*nur dann\* kann man in MySQL diese Spalte aus der Liste der GROUP-BY-Klausel weglassen.  
  
Sind alle Daten in anderen Spalten als produkt\_id für jede produkt\_id gleich? Wenn ja, dann ok. Wenn nein, warum fragst Du sie überhaupt ab, da Du eh unvorhersagbare Werte in diesen Spalten bekommst.  
  
Weitere Fragen:  
Gibt es einen Index für die Spalte produkt\_id?  
Gibt es einen Index für die Spalte preis?  
  
Noch ein Lesetipp: [Optimizing Queries with EXPLAIN](http://dev.mysql.com/doc/refman/5.0/en/using-explain.html).  
  
  
Freundliche Grüße  
  
Vinzenz