![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 104 Pomógł: 3 Dołączył: 13.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Musze koniecznie uzyc LEFT JOIN, dlatego, ze musze wyswietlac rowniez wartosci NULL i je pogrupowac.
Mam dwie tabele, jedna skaladajaca sie (do tej pory) z okolo 50000 rekordow, struktura:
A tu druga tabela, zawierajaca kilkanascie rekordow, w ktorej wpisuje ile maili zostalo wyslanych:
I teraz zapytanie, ktore grupuje wszystkie wyslane maile, laczy sie z druga tabela i na tej podstawie moge wylicz procent otwarte/wyslane:
I problem w tym, ze ten kochany LEFT JOIN opoznia generacje wynikow do okolo 40sek. Mozna to jakos zoptymalizowac? Ten post edytował redman2 23.07.2007, 13:44:57 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 104 Pomógł: 3 Dołączył: 13.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Mam indeksy, co widac w pierwszym poscie przy definicji tabel.
A co za roznica czy zrobie RIGHT JOIN czy LEFT JOIN, jezeli ich algorytm jest taki sam, tylko roznia sie tym, ze argument zamiast z lewej, jest z prawej strony. Z dokumentacji MySQL 5: The implementation of RIGHT JOIN is analogous to that of LEFT JOIN with the roles of the tables reversed. Poza tym "count" liczy te z NULL tez, dlatego, ze je grupuje. Napisalem tez, ze musze koniecznie uzyc LEFT JOIN, a to dlatego, ze zalezy mi na zliczaniu tych rekordow ktore sa NULL. Wyjasnie to na przykladzie: Wysylam iles tam tysiecy maili dziennie. Kazda grupa maili na swoj tytul i po otwarciu kazdego z nich zapisywany jest w bazie z danym tytulem i adresem email osoby otwierajacej. To jest pole 'no'. Druga tabela, natomiast, jest zwykla sumaryczna tabela tematow, z kolumna ile maili zostalo wyslanych z danej grupy. I dlatego wlasnie musze miec NULL, bo jezeli po zlaczeniu nie ma wartosci w drugiej tabeli, znaczy to, ze musi tam byc wpisana ilosc wyslanych maili. A tu INNER JOIN odpada. Ten post edytował redman2 23.07.2007, 15:12:58 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 18:08 |