Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> optymalizacja zapytania z kilkoma podzapytaniami
php programmer
post
Post #1





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

Ostrzeżenie: (0%)
-----


Hej mam zapytanie, które wykonuje się dość długo
ze względu na zawarte 3 podzapytania,
W wygląda to mniej więcej tak:

  1. SELECT *,
  2. ( SELECT SUM(a) FROM tabela2 WHERE tabela2.pole = tabela1.pole) AS wynik1 ),
  3. ( SELECT COUNT(*) FROM tabela2 WHERE tabela2.pole = tabela1.pole AND ...) AS wynik2 ),
  4. ( SELECT COUNT(*) FROM tabela2 WHERE tabela2.pole = tabela1.pole AND ...) AS wynik3 ),
  5. FROM tabela1


Jak widać podzapytania operują na tej samej (podrzędnej) tabeli a na dodatek
łaczą się tabelą główną za pomocą tej samej pary kluczy tj
tabela2.pole = tabela1.pole

Czy w związku z tym, można było by inaczej sformułowac zapytanie
żeby się szybciej wykonywało niż teraz ?

Ten post edytował php programmer 19.06.2007, 12:36:07
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #2


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

Ostrzeżenie: (0%)
-----


Ja bym utworzył dodatkowe tabele na liczniki i dla sum. Wtedy przy dodaniu rekordu do odpowiedniej tabeli inkrementujesz odpowiednie pole w tabeli licznik, za pomocą wyzwalacza oczywiście, tak samo z sumą. Potem wyciągnięcie tych danych nie stanowi problemu, jeśli masz liste pól, po których wyciągasz. Bo o ile funkcja sum() działa w miare przyzwoicie to funkcja count() ślamazarzy przy dużej liczbie rekordów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
AcidBurnt
post
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 1
Dołączył: 13.04.2003
Skąd: z ławki przed blokiem

Ostrzeżenie: (0%)
-----


dokładnie jak mówi zblakany nie ma tutaj co optymalizowac... napisac kilka trigerkow i ON INSERT ON DELETE i po problemie
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 10:43