Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Optymalizacja zapytania
Forum PHP.pl > Forum > Bazy danych
Santii
Cześć, napisałem takie zapytanie:
  1. SELECT u.id_users,name,surname,IFNULL(reserve,0),IFNULL(lends,0)
  2. FROM users u
  3. LEFT JOIN
  4. (SELECT id_users,COUNT(*) AS lends FROM lend GROUP BY id_users) AS l
  5. ON u.id_users = l.id_users
  6. LEFT JOIN
  7. (SELECT id_users,COUNT(*) AS reserve FROM reservation GROUP BY id_users) AS r
  8. ON r.id_users = u.id_users
  9. WHERE name LIKE '%kamil%' LIMIT 600,15 ;

W tabeli lend mam 60 tys. rekordów, a w users ok. 40 tys.,tabela reserve jest póki co pusta. Tabela lend ma pola id_users oraz is_books, nie ma klucza podstawowego ani indeksów, a te dwa pola są kluczami obcymi. Próbowałem dodać index na pole id_users, ale nic to nie zmieniło. Całość wykonuje się obecnie w 1.13 sec, a przydało by się z 6 razy szybciej....
thek
Lepiej napisz CO ma według Ciebie robić owo zapytanie. Myślę, że liczbę lends i reserve dla każdego usera, ale to zgaduje po treści zapytania. Opisz problem dokładniej, czyli co chcesz uzyskać, a co masz.
Santii
O sorry, wydawało mi się, że da się to wyczytać z zapytania. W sumie zdążyłem już napisać coś takiego, poprzednie zapytanie było przekombinowane, czasowo wychodzi ok. 0.08 sec, więc wszystko gra : )
  1. SELECT u.id_users,name,surname,
  2. (SELECT COUNT(id_users) AS reserve FROM reservation WHERE id_users = u.id_users) AS r,
  3. (SELECT COUNT(id_users) AS lends FROM lend WHERE id_users = u.id_users) AS l
  4. FROM users u WHERE name LIKE '%kamil%' LIMIT 600,15;
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.