Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Wykorzystanie sum() kilka razy
Forum PHP.pl > Forum > Przedszkole
SmokAnalog
Cześć,

załóżmy, że mam takie zapytanie:

Kod
SELECT sum(`a`),
       sum(`b`),
       sum(`a`) - sum(`b`) AS `balance`
FROM `tabela`


Czy MySQL zapamięta sobie poszczególne sumy dla obliczenia `balance` czy będzie je liczyło od nowa? Jeśli od nowa, to jak to najprościej zoptymalizować? Próbowałem zmiennymi:

Kod
SELECT @sum_a := sum(`a`),
       @sum_b := sum(`b`),
       @sum_a - @sum_b AS `balance`
FROM `tabela`


Ale to jakieś bzdury zwraca w `balance` smile.gif A poza tym nie jestem pewien czy to potrzebne. Wiecie jak działa MySQL w tym względzie?
Crozin
1. Chcąc się upewnić że dane będą liczone na pewno tylko raz należałoby skorzystać z podzapytania.
2. EXPLAIN na zapytaniu nie zwraca takich detali, ale porównując oba zapytania zarówno w MySQL-u jak i Postgresie wygląda na to, że nie ma pomiędzy nimi różnicy. W obu przypadkach złożoność obliczeniowa to O(n).
3. Jeżeli to zapytanie samo w sobie nie sprawia problemów zostaw je jak jest - przedwczesna optymalizacja najczęściej przynosi więcej szkód niż pożytku.
  1. SELECT SUM(a) AS a, SUM(b) AS b, SUM(a) - SUM(b) AS balane FROM tabela;
  2. SELECT *, a - b AS balance FROM (SELECT SUM(a) AS a, SUM(b) AS b FROM tabela) tmp;
SmokAnalog
Nie ma jakichś oficjalnych oświadczeń na ten temat? Dziwnie tak robić coś "żeby mieć pewność", MySQL raczej działa według określonego algorytmu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.