ich großen TischMySQL Tuning - zu mutch SUM (CASE WHEN ... THEN ... END) benötigt
customer_id ; category ; quantity ;budget ; profit
15570 ; garden ; 1.000,00 ; 1.325,00 ; 59,94
17090 ; cars ; 9.600,00 ; 11.671,76 ; -409,28
10360 ; cars ; 12.110,00 ; 3.981,60 ; 961,97
10360 ; garden ; 10.150,00 ; 4.828,95 ; 872,27
16460 ; toys ; 24.000,00 ; 19.656,00 ; 991,00
18260 ; metal ; 24.000,00 ; 17.688,00 ; -1.131,52
...
und diese Abfrage zu finden Menge, Budget, Gewinn für jede Kategorie
SELECT customer_id,
(SUM(CASE WHEN category = 'garden' THEN budget END)) as budget1,
(SUM(CASE WHEN category = 'garden' THEN quantity END)) as quantity1,
(SUM(CASE WHEN category = 'garden' THEN profit END)) as profit1,
(SUM(CASE WHEN category = 'cars' THEN budget END)) as budget2,
(SUM(CASE WHEN category = 'cars' THEN quantity END)) as quantity2,
(SUM(CASE WHEN category = 'cars' THEN profit END)) as profit2,
(SUM(CASE WHEN category = 'toys' THEN budget END)) as budget3,
(SUM(CASE WHEN category = 'toys' THEN quantity END)) as quantity3,
(SUM(CASE WHEN category = 'toys' THEN profit END)) as profit3,
(SUM(CASE WHEN category = 'metal' THEN budget END)) as budget4,
(SUM(CASE WHEN category = 'metal' THEN quantity END)) as quantity4,
(SUM(CASE WHEN category = 'metal' THEN profit END)) as profit4
SUM(budget) as budget,
SUM(quantity) as quantity,
SUM(profit) as profit
FROM `sales` GROUP BY customer_id
haben
Ist es möglich, die Abfrage schneller (effizienter) zu machen?
Vielen Dank!
Sie können einen Index auf 'customer_id' versuchen, aber ich denke nicht, dass das hilft. MySQL hat nicht viele Optionen, um Aggregationsabfragen zu optimieren. –
Geben Sie auch Beispieldaten an, mit denen Sie feststellen können, ob es andere Möglichkeiten gibt, dieselben Ergebnisse zu erzielen. –
Vermutlich (customer_id, category) ist Ihr PRIMÄRSCHLÜSSEL? – Strawberry