Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc w optymalizacji zapytania
Forum PHP.pl > Forum > Bazy danych
wojtaas_pl
Witam.

Mam taką tabele:

  1. +--+-------+------------------+---------------------+
  2. |id|ip |referer |time |
  3. +--+-------+------------------+---------------------+
  4. |1 |1.2.3.4 |http://google.pl/ |1970-01-01 00:00:00|
  5. +--+-------+------------------+---------------------+
  6. |2 |3.2.1.2 |http://bing.com/ |1971-02-01 00:10:00|
  7. +--+-------+------------------+---------------------+
  8. itd.


ogólnie jakieś tam statystyki z zapisem z jakiego IP jaki referer i kiedy.
Potrzebuję wyświetlić 20 ostatnich unikalnych (tak aby w wyniku nie powtarzały się adresy) wejść, plus dodać falagę ze w referer zawiera słowo %msg%.

Mam taki kod, który działa ale przy ok 10tyś. rekordów już zamula. Czy można go zoptymalizować:

  1. SELECT id, ip AS wyip, ile, referer, time, (
  2.  
  3. CASE WHEN (
  4. (
  5.  
  6. SELECT COUNT( ip )
  7. FROM `stats`
  8. WHERE wyip = ip
  9. AND referer LIKE '%msg%'
  10. ) >0
  11. )
  12. THEN '1'
  13. ELSE '0'
  14. END
  15. ) AS msg
  16. FROM (
  17.  
  18. SELECT IP AS UNIQIP, COUNT( IP ) AS ILE
  19. FROM `stats`
  20. GROUP BY IP
  21. )T2, (
  22.  
  23. SELECT id, time, ip, referer
  24. FROM (
  25.  
  26. SELECT MAX( time ) AS time, MAX( id ) AS id, ip, referer
  27. FROM `stats`
  28. GROUP BY ip
  29. ORDER BY id DESC
  30. ) AS `stats`
  31. LEFT JOIN `stats`
  32. USING ( id, time, ip, referer)
  33. )T
  34. WHERE IP = UNIQIP
  35. ORDER BY ID DESC
  36. LIMIT 0 , 20
  37.  
  38.  


Dziękuje za odpowiedzi:)
buliq
EXPLAIN - mysql
za dużo podzapytań chyba co?
mmmmmmm
Czy mi się wydaje, czy to zapytanie zwraca to samo:
  1. SELECT IP, referer, AS UNIQIP, COUNT(IP) AS ILE, MAX(time) AS time, MAX(id) AS id, sign(count(case when wyip=ip AND referer LIKE '%msg%' then ip end)) FROM `stats` GROUP BY IP, referer
wojtaas_pl
poniżej zamieszczam EXPLAIN ale musze przyznać że jestem zielony z tego:

  1. id select_type TABLE type possible_keys KEY key_len ref rows Extra
  2. 1 PRIMARY <derived4> ALL NULL NULL NULL NULL 4330 USING TEMPORARY; USING filesort
  3. 1 PRIMARY <derived3> ALL NULL NULL NULL NULL 4330 USING WHERE; USING JOIN buffer
  4. 4 DERIVED <derived5> ALL NULL NULL NULL NULL 4330
  5. 4 DERIVED stats eq_ref PRIMARY,id PRIMARY 4 stats.id 1
  6. 5 DERIVED stats ALL NULL NULL NULL NULL 10401 USING TEMPORARY; USING filesort
  7. 3 DERIVED stats ALL NULL NULL NULL NULL 10401 USING TEMPORARY; USING filesort
  8. 2 DEPENDENT SUBQUERY stats ALL NULL NULL NULL NULL 10401 USING WHERE
sazian
masakra biggrin.gif
przeczytaj przykładowy rozdział http://helion.pl/ksiazki/wysoko-wydajne-my...q.htm#szczegoly

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.