Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wolny LEFT JOIN
redman2
post
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:

  1. CREATE TABLE `email_confirm` (
  2. `id` int(3) NOT NULL AUTO_INCREMENT,
  3. `no` varchar(100) NOT NULL,
  4. `email` varchar(100) NOT NULL',
  5. `date` datetime NOT NULL,
  6. `ver` varchar(6) NOT NULL,
  7. PRIMARY KEY (`id`),
  8. KEY `no` (`no`),
  9. KEY `email` (`email`)
  10. ) ENGINE=MyISAM;


A tu druga tabela, zawierajaca kilkanascie rekordow, w ktorej wpisuje ile maili zostalo wyslanych:

  1. CREATE TABLE `email_confirm_sent` (
  2. `id` int(3) NOT NULL AUTO_INCREMENT,
  3. `no` varchar(100) NOT NULL,
  4. `quantity` int(10) NOT NULL,
  5. PRIMARY KEY (`id`),
  6. KEY `no` (`no`),
  7. KEY `quantity` (`quantity`)
  8. ) ENGINE=MyISAM;



I teraz zapytanie, ktore grupuje wszystkie wyslane maile, laczy sie z druga tabela i na tej podstawie moge wylicz procent otwarte/wyslane:

  1. SELECT email_confirm.no, COUNT(email_confirm.no) AS counts, quantity
  2. FROM email_confirm LEFT JOIN email_confirm_sent
  3. ON email_confirm.no = email_confirm_sent.no
  4. WHERE email NOT LIKE '%spa.pl'
  5. GROUP BY email_confirm.no HAVING counts > 10


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
php programmer
post
Post #2





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

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


Cytat
1. Pierwsza tabela jest bardzo czesto aktualizowana (dodawane co kilka minut nowe rekordy)
2. Zapytanie jest czesto uruchamiane przez kilka osob w firmie


Ależ to nie ma znaczenia,
mam na myśli tablicę w sensie php
Może źle się wyraziłem w poprzednim poście i myśleś o tabeli SQL ?
Przecież za każdym razem jak będziesz wykonywał zapytanie,
to wczytujesz drugą tabelę do tablicy php,

To co proponuje w sensie merytorycznym
zwraca dane takie same jak twój LEFT JOIN,
chyba nie sądzisz, że w ciągu wykonywania zapytania
trwającego mniej niż sekundę zajdą jakieś poważne zmiany?
Jak tak co jest mało prawdopodobne to użytkownik dostanie wynik
sprzed kilku sekundy co można uznać za aktualny

Ten post edytował php programmer 23.07.2007, 14:24:42
Go to the top of the page
+Quote Post

Posty w temacie


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: 26.12.2025 - 15:02