![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Czesc nie znam sie bardzo na bazach danych i chcialem sie zapytac powiedzmy ze musze pobrac dane z 3 tabel users,ban i active_account i nawet gdy nie znajdzie rekordu w ktorejs z tabel to ma zwrocic null czyli w tym przypadku uzywajac relacje musze uzyc LEFT JOIN
I problem polega na tym lepiej jest wykonywac takie zapytania w ten sposob:
Czy:
Ktore zapytanie jest bardziej wydajne? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Faktycznie sprawdzałem i jest jak mówisz - dziwne bo jeszcze trzy lata temu miałem identyczny przypadek i zamiast joinować dużą tabelę dużo szybciej wychodziło pobranie z niej paru ID podzapytaniem i wrzucenie tego do where. Może optimizer nie radzi sobie z bardziej skomplikowanymi zapytaniami albo go ulepszyli albo znaczenie ma cały szereg innych czynników, włącznie z silnikiem bazy. Pewnie podzapytanie będzie szybsze, jeśli nie mamy indeksów na joinowane pola.
To tak jak pobieranie liczbe rekordów przy pomocy found calc rows - do dziś nie wiem czy używać tego czy nie. Wygląda na to, że każdy przypadek należy rozpatrywać indywidualnie, trzeba robić explain i rzeźbić. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 05:49 |