Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Optymalizacja zapytania
Santii
post 2.11.2010, 11:19:50
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 11.09.2010

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


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....
Go to the top of the page
+Quote Post
thek
post 2.11.2010, 14:57:02
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Santii
post 2.11.2010, 22:16:58
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 11.09.2010

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


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;


Ten post edytował Santii 2.11.2010, 22:17:31
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:33