Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] na co założyć index?
psw779
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 25.03.2006

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


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:
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
zzeus
post
Post #2





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

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


spróbuj p.idg


--------------------
Go to the top of the page
+Quote Post
thek
post
Post #3





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




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


--------------------
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
psw779
post
Post #4





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 25.03.2006

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


A coś związane z MAX? Słyszałem, że index tutaj byłby szczególnie ważny, tylko jak to zrobić?
Go to the top of the page
+Quote Post
thek
post
Post #5





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




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.


--------------------
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

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 Aktualny czas: 21.08.2025 - 08:25