Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Podwójny LEFT JOIN wydajność
sannin
post 5.07.2009, 23:36:42
Post #1





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Witam,

mam takie zapytanie

  1. SELECT data_kody.id, data_kody.kod, data_artykuly.nazwa, dataWydania, iloscPran, iloscNapraw, wPralni, data_pracownicy.imie, data_pracownicy.nazwisko
  2. FROM data_kody LEFT JOIN data_artykuly ON data_artykuly.idArtykulu = data_kody.idArtykulu
  3. LEFT JOIN data_pracownicy ON data_kody.idPracownika = data_pracownicy.idPracownika AND data_kody.idStacji = data_pracownicy.idStacji
  4. WHERE data_kody.idStacji = 13


Wykonywanie tego zapytania trwa około 7 sek to sporo... zastanawiam się tylko czy jest ono mało optymalne czy to normalne? W tabeli data_kody jest około 180 tys wpisów, a w data_pracownicy około 1,2 tys. Czy da się jakoś to zoptymalizować?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
TheaSiX
post 6.07.2009, 00:00:25
Post #2





Grupa: Zarejestrowani
Postów: 110
Pomógł: 10
Dołączył: 3.09.2006
Skąd: Bishop Auckland

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


Czy wyświetlasz wszystkie te rekordy na jednej stronie? Zakładam, że nie, więc może warto byłoby użyć opcji LIMIT, by pobierać tylko dany przedział rekordów. Przy tak dużej bazie jest to myślę dość optymalne wyjście.
Go to the top of the page
+Quote Post
sannin
post 6.07.2009, 00:17:19
Post #3





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


W oryginale limit jest... ale nie daje to za dużo.... a raczej prawie nic
Go to the top of the page
+Quote Post
dr_bonzo
post 6.07.2009, 01:13:55
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


A masz pozakladane indeksy na kolumny po ktorych joinujesz?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
sannin
post 6.07.2009, 01:59:53
Post #5





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Nie, a czy to coś da i jakie ustawić? Chodzi Ci o primary itd. dla jasności?
Go to the top of the page
+Quote Post
Savage.Mephisto
post 6.07.2009, 08:33:49
Post #6





Grupa: Zarejestrowani
Postów: 122
Pomógł: 11
Dołączył: 24.01.2008

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


Indeksy skracają czas potrzebny na wyszukanie i odczytanie żądanych danych z bazy danych. W phpMyAdmin, pod tabelą z danymi, na dole masz możliwość utworzenia indeksów dla poszczególnych kolumn. Wystarczy tylko użyć opcji 'Utwórz indeks dla 1 kolumny -> Wykonaj'.


--------------------
Myślisz, że przeżyjesz swoje życie w blasku i chwale...
Lecz jest coś, co zmieni ci cały świat...
Szczerość!
Go to the top of the page
+Quote Post
sannin
post 6.07.2009, 17:15:13
Post #7





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Teraz mam jeszcze pytanie, jak zrobię te indexy i do tabeli dojdą nowe rekordy to nie będzie problemów, czy będą one dostępne?
Go to the top of the page
+Quote Post
dr_bonzo
post 6.07.2009, 17:22:31
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


A czemu mialy by nie byc dostepne? Indeks aktualizuje sie po zmianach w tabeli.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
sannin
post 6.07.2009, 17:38:34
Post #9





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Dobra dzięki... już prawie kumam teraz mam tylko pytanie na które kolumny pozakładać indexy? Czytałem w google, ale nie do końca kumam te przykłady czy może ktoś w jednym zdaniu łopatologicznie mi to wyjaśnić. Przy okazji lekko zmieniłem zapis
  1. SELECT k.id, k.kod, a.nazwa, dataWydania, iloscPran, iloscNapraw, wPralni, p.imie, p.nazwisko
  2. FROM data_kody k
  3. LEFT JOIN data_artykuly a USING(idArtykulu)
  4. LEFT JOIN data_pracownicy p USING(idPracownika, idStacji)
  5. WHERE k.idStacji = 13 LIMIT 0, 50
Go to the top of the page
+Quote Post
seth-kk
post 6.07.2009, 17:57:15
Post #10





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

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


na klucze obce


--------------------
Go to the top of the page
+Quote Post
sannin
post 6.07.2009, 18:07:10
Post #11





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


bardziej chodzi mi o to czy na wybierane czy też na te w porównaniach?

Nadałem dla
Cytat
idPracownika, idStacji, idArtykulu
śmiga pięknie 0,06 sek smile.gif dzięki wielkie wszystkim
Go to the top of the page
+Quote Post
seth-kk
post 6.07.2009, 18:07:58
Post #12





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

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


przy tak niewielkiej ilosc przeszukiwanych kolumn raczej nie zaszkodzi na wszystkie (biorace udzial w szukaniu)


--------------------
Go to the top of the page
+Quote Post
sannin
post 6.07.2009, 18:26:05
Post #13





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Ok zaraz jeszcze po testuje. Nadałem jeden index dla 2 kolumn (idPracownika, idStacji) (UNIQUE) czy dobrze zrobiłem?
Go to the top of the page
+Quote Post
seth-kk
post 6.07.2009, 19:14:14
Post #14





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

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


tak dopuki bedziesz szukal po obu kolumnach jednoczesnie


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 6.07.2009, 20:31:05
Post #15





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cytat(sannin @ 6.07.2009, 19:26:05 ) *
Ok zaraz jeszcze po testuje. Nadałem jeden index dla 2 kolumn (idPracownika, idStacji) (UNIQUE) czy dobrze zrobiłem?


A czemu go dodales wlasnie tak?

Jak po to zeby zezwolic na tylko jeden rekord o idPracownika i idStacji - to dobrze.

Jak po to zeby przyspieszyc Joiny - to zle, bo powiniens dodac po 1 indeksie zwyklym na kazda z tych 2ch kolumn.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
viking
post 7.07.2009, 04:57:48
Post #16





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Zobacz takie rzeczy EXPLAIN i ANALYZE bo zapytania to specyficzna sprawa gdzie nie da się jednej konkretnej odpowiedzi udzielić. Jeśli zobaczysz że zapytanie korzysta z indeksów a czas będzie lepszy znaczy że idziesz w dobrym kierunku 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: 14.08.2025 - 09:04