![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
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` (IMG:style_emoticons/default/smile.gif) A poza tym nie jestem pewien czy to potrzebne. Wiecie jak działa MySQL w tym względzie? Ten post edytował SmokAnalog 30.08.2014, 21:54:22 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 22:32 |