![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 8.03.2018 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam 2 tabele: produkty oraz zdjęcia. Produktów jest ok 200tys oraz zdjęć ok 400tys. Dla jednego produktu czasami przypada po kilka zdjęć. Nie wszystkie produkty mają zdjęcia. Potrzebuje wyciągnąć max 10 produktów, które mają zdjęcia, oraz są promowane. Niby problem banalny, lecz na lokalnym serwerze zapytanie mieli się ok 7 sek, na serwerze prod. ok 4 sek. Czas ten stanowczo jest za długi. Kiedy z zapytania wywalę GROUP BY zapytanie na localhoscie trwa ok 2 sek. Z góry dziękuje za pomoc. O to moje zapytanie:
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 799 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
LEFT JOIN są zupełnie niepotrzebne skoro:
1.Chcesz wyciągnąć produkty tylko ze zdjęciami. 2. Dodajesz warunki do tabel z LEFT JOIN w WHERE. Zamiast GROUP BY możesz dać DISTINCT. -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 8.03.2018 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odp.
Dlaczego LEFT jest nie potrzebne ? W takim razie jak wyciągnąć produkt ze zdjęciem skoro zdjęcia to osobna indeksowana tabela ? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 799 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
INNER JOIN lub złączenie w WHERE.
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Zostaw wszędzie samo JOIN
Przenieś `cats.enabled = '1'` do JOIN czyli JOIN adcats AS cats ON cats.catid = ads.catid AND cats.enabled = '1' To pozwoli trochę ograniczyć wyniki. Poza tym sprawdź czy używa indeksów poprzez EXPLAIN Da Ci to jakiś ogląd na sprawę. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 8.03.2018 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuje po użyciu Inner JOIN wygląda na to że ładowanie odbywa się szybciej. Czy może mi ktoś napisać tak po "chłopsku" jaka jest różnica miedzy LEFT/RIGHT a INNER na dużych zbiorach ?
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 3.05.2025 - 11:20 |