Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> ORDER BY po kolumnie z indeksem długo działa
TomASS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Mam zapytanie

  1. [/sql]
  2. SELECT *
  3. FROM m_transporty_miejsca AS TM
  4. LEFT JOIN m_transporty AS T ON (T.ID=TM.ID_transport)
  5. LEFT JOIN m_magazyny AS M ON (M.ID=T.ID_magazyn)
  6. LEFT JOIN m_przewoznicy AS Pr ON (Pr.ID=T.ID_przewoznik)
  7. WHERE Miejsce='akt' AND DATE(T.DateRealizacji) >= '2016-11-26' AND T.RodzajCiezarowki='plandeka24' AND DATE(T.DateRealizacji) <= '2016-11-28' AND 1 ORDER BY `Status` ASC LIMIT 0, 40
  8. [sql]


Na kolumnie Status jest indeks. Status to CHAR(10).

Takie zapytanie wykonuje się 78sekund
Po usunięciu ORDER BY `Status` czas spada do 2-3sekund.

Co robić? (IMG:style_emoticons/default/sad.gif)
Indeks jest
Zmieniałem bazę danych z MySQL 5.0 na 5.6 i tak się porobiło :/
Explain pokazuje:
(IMG:https://s14.postimg.org/uc83n7h8h/image.png)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Poniewasz masz tam jeszcze warunki.

Musisz zalozyc indexy tez na warunki.
Swoja droga masz zdziebko zwalone pola. To nie powinny byc zadne stringi a INTy ewentualnie ENUM jak chcesz dzialac na nazwach. I nie mowie tu tylko o kolumnie status.
Go to the top of the page
+Quote Post
TomASS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Dzięki,

tylko:
1. na MySQL 5.0 nie było problemów :/
2. Indeks nie może być za długi a liczba pól w warunkach jest spora
3. Dlaczego nie mogą być stringi? Mówisz o Miejsce i RodzajCiezarowki ?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ps:
I miejze litosc na przyszlosc i nie mieszaj jezykow
DateRealizacji
no jak to wyglada? (IMG:style_emoticons/default/wink.gif)

Cytat
Dlaczego nie mogą być stringi? Mówisz o Miejsce i RodzajCiezarowki ?

Tak. Zakladam ze to sa jakies stale nazwy. Dla bazy latwiej jest zaindeksowac TINYINT/ENUM ktore ma raptem 10 roznych wartosci niz string ktory moze teoretycznie byc czym popadnie.
Go to the top of the page
+Quote Post
TomASS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat(nospor @ 24.11.2016, 18:07:47 ) *
ps:
I miejze litosc na przyszlosc i nie miesaj jezykow
DateRealizacji
no jak to wyglada? (IMG:style_emoticons/default/wink.gif)


A skąd wiesz, że to ja? (IMG:style_emoticons/default/smile.gif)

Cytat(nospor @ 24.11.2016, 18:07:47 ) *
Tak. Zakladam ze to sa jakies stale nazwy. Dla bazy latwiej jest zaindeksowac INT/ENUM ktore ma raptem 10 roznych wartosci niz string ktory moze teoretycznie byc czym popadnie.

Jak pole "Miejsce" typu enum (3 wartości) to działało znacznie dłużej :/

Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Jak pole "Miejsce" typu enum (3 wartości) to działało znacznie dłużej
Strasznie szybko to zmieniles. Az mi sie niechce wiezyc (IMG:style_emoticons/default/wink.gif)

Cytat
A skąd wiesz, że to ja?
Coz.... moja wina (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
TomASS
post
Post #7





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat(nospor @ 24.11.2016, 18:10:15 ) *
Strasznie szybko to zmieniles. Az mi sie niechce wiezyc (IMG:style_emoticons/default/wink.gif)

Było wcześniej i kilka miesięcy temu zmieniłem z enum na char

Ten post edytował TomASS 24.11.2016, 17:14:49
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #8





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Wywal LEFT JOIN przy aliasie T (m_transporty).
Skoro później wymieniasz pola z tej tabeli we WHERE, to LEFT jest bez sensu. No chyba, że masz w warunku T.id IS NULL (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 20:35