Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]długo wykonujące się podzapytanie
Forum PHP.pl > Forum > Przedszkole
jacusek
Witam.
Mam dwie table
gdzie w tabeli klient jest:
id_kli
nazwisko

w tab transakcje mam:
id_pra
id_kli
data

próbuję zrobić podzapytanie, które pomoże wyciągnąć nazwiska klientów, które powtarzają się więcej niż raz w tab transakcje:

wymyśliłem coś takiego
  1. SELECT nazwisko
  2. FROM klienci JOIN transakcje USING(id_kli)
  3. WHERE id_kli IN
  4. (SELECT id_kli FROM transakcje
  5. GROUP BY id_kli
  6. HAVING count(id_kli)>1)
  7. GROUP BY id_kli

Pytanie generalnie działa, pokazuje mi co chcę, żeby pokazywał, ale niestety wykonuje się około 25 s.
Gdzie może tkwić błąd?
Dodam, że obie tabele są innoDB i obie mają założony index

PROBLEM ROZWIĄZANY
No właśnie, choć troszkę na okrętkę i nie jestem do końca zadowolony. Stworzyłem z podzapytania widok, odpowiednio zmodyfikowałem zapytanie i działa bezproblemowo.
erix
A co EXPLAIN pokazuje?
jacusek
explain pokazuje coś takiego

"id";"select_type";"table";"type";"possible_keys";"key";"key_len";"ref";"rows";"Extra"
"1";"PRIMARY";"klienci";"ALL";NULL;NULL;NULL;NULL;"6504";"Using where"
"2";"DEPENDENT SUBQUERY";"transakcje";"index";NULL;"id_kli";"4";NULL;"1";"Using index"

ale szczerze mówić nie wiem jak to interpretować.

Udało mi się to rozwiązać w nastepujący sposób:
  1. SELECT nazwisko FROM
  2. (SELECT id_kli FROM transakcje GROUP BY id_kli HAVING count(id_kli)>1) AS t1 JOIN klienci USING(id_kli)
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.