Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] na co założyć index?
Forum PHP.pl > Forum > Bazy danych > MySQL
psw779
Mam takie zapytanie:

  1. SELECT
  2.  
  3. pid.date AS galleryDate,
  4. pid.time AS galleryTime,
  5. pid.name AS galleryName,
  6. pid.title AS galleryTitle,
  7.  
  8. p.date AS pictureDate,
  9. p.time AS pictureTime,
  10. p.gallery AS pictureGallery,
  11. p.name AS pictureName,
  12. p.title AS pictureTitle,
  13.  
  14. IFNULL(pid.countv,0) AS countViews,
  15. IFNULL(pid.countp,0) AS countPictures
  16.  
  17. FROM
  18.  
  19. (
  20. SELECT
  21. g.date, g.time, g.name, g.title,
  22.  
  23. MAX(p.id) AS maxid, SUM(countv) AS countv, COUNT(*) AS countp
  24.  
  25. FROM pictures p
  26.  
  27. LEFT JOIN galleries g ON p.idg = g.id
  28.  
  29. GROUP BY p.idg
  30. ORDER BY g.id DESC
  31. ) pid
  32.  
  33. LEFT JOIN pictures p ON pid.maxid = p.id
  34.  
  35. ORDER BY p.id DESC
  36. LIMIT 10


Wykonuje mi się około 0,4s. Na co założyć index aby było szybsze?

Explain:
zzeus
spróbuj p.idg
thek
Index zazwyczaj nakłada się na kolumnę, która jest bardzo często używana, a więc ta, która służy do łączenia z innymi, której używa się w warunku WHERE, GROUP BY lub HAVING czy też ORDER BY.
W tym wypadku najlepiej na p.idg oraz g.id
psw779
A coś związane z MAX? Słyszałem, że index tutaj byłby szczególnie ważny, tylko jak to zrobić?
thek
Jak już napisałem, Index zakłada się na te kolumny, których się często używa. Jeśli przewidujesz liczenie tego często, to załóż tez index na te pozycje, które obejmuje liczenie MAXem. W Twoim wypadku to p.id ale byloby nieco dziwne, gdybyś nie miał na tym już indexu PRIMARY od samego założenia bazy, bo w końcu na tej kolumnie często robi się WHERE.
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-2024 Invision Power Services, Inc.