Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wynik EXPLAIN, pomoc w optymalizacji
andycole
post 7.10.2009, 15:01:50
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 14.12.2004

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


  1. SELECT
  2. zawodnicy.id, CONCAT(nazwisko, ' ', imie) AS zawodnik, pozycja, id_kraju, nazwa, YEAR(CURDATE())-YEAR(data_ur) AS ile
  3. FROM zawodnicy
  4. LEFT JOIN kraje ON zawodnicy.id_kraju=kraje.id
  5. WHERE DAY(data_ur)='7' AND MONTH(data_ur)='10';


wszelkie "id" to klucze podstawowe
data_ur to indeks

Mimo to EXPLAIN zwraca mi, ze nie uzywam indeksu (type ALL):

  1. id select_type TABLE type possible_keys KEY key_len ref rows Extra
  2. 1 SIMPLE zawodnicy ALL NULL NULL NULL NULL 3695 USING WHERE
  3. 1 SIMPLE kraje eq_ref PRIMARY PRIMARY 2 strona.zawodnicy.id_kraju 1


Jak inaczej dobrac sie do rekordow ktore maja pole DATE rowne podanemu dniu i miesiacu, obojetnie ktory rok.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
zzeus
post 7.10.2009, 15:20:17
Post #2





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

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


MySQL nie użyje indeksu jeśli w warunku WHERE używasz funkcji typu DAY() czy MONTH(). Przepisz zapytanie tak aby z nich nie korzystało.

Ten post edytował zzeus 7.10.2009, 15:20:35


--------------------
Go to the top of the page
+Quote Post
andycole
post 8.10.2009, 11:30:00
Post #3





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 14.12.2004

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


wlasnie problem w tym, ze nie mam pomyslu jak mialbym to przepisac...
moze jakies wskazowki?
zalezy mi na zrobieniu tego zmieniajac tylko zapytanie... nie chce przechodzic na unixowy znacznik czasu ani robic tego z poziomu PHP

nikt nie pomoze? smile.gif
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: 27.06.2025 - 01:09