Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Select w select czy join-y
marcio
post
Post #1





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


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:
  1. SELECT *
  2. FROM users
  3. LEFT JOIN ban ON ban_user = users.login
  4. LEFT JOIN active_account ON active_user_id = users.id
  5. WHERE login = 'vodka'
  6. LIMIT 1

Czy:
  1. SELECT * , (
  2. SELECT id
  3. FROM ban
  4. WHERE ban_user = 'vodka'
  5. ) AS banned , (
  6. SELECT id
  7. FROM active_account
  8. WHERE active_user_id = users.id
  9. ) AS active
  10. FROM users
  11. WHERE login = 'vodka'
  12. LIMIT 1

Ktore zapytanie jest bardziej wydajne?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
alegorn
post
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


jesli chodzi o podzapytania vs joiny, to w typowej edycji mysql joiny beda zawsze wygrywac (no, prawie zawsze)
gdybym mialbym byc zmuszony do dzialania na podzapytaniach - to tylko na MariaDB, w ktorym to zostalo gruntownie przebudowane, i tam rzeczywiscie dziala lepiej.

jesli nie mamy wyjscia i nie mozemy (lub nie umiemy) przepisac zapytania na joiny - warto rozdzielic to na kika etapow (czyli pola id wybrac w osobnym zapytaniu, i np w phpie wstawic do kolejnego zapytania)
oczywiscie nie zadziala to dobrze, jesli ilosc id bedzie znacznie przesadzona (IMG:style_emoticons/default/wink.gif) (zyskujemy tutaj dodatkowy bonus w postaci wielowatkowosci)

ide o zaklad, ze na mysql w 9 na 10 przypadkach, na nietrywialnych tabelach (i optymalnych) join bedzie mial lepsze statystyki. (przynajmniej do wersji 5.5.x)

co do argumentu ze wielu programistow wykorzystuje subquery. moge w tym temacie powiedziec jedynie, ze wielu programistow nie rozumie/nie zna sql'a i nie ma pojecia jak pisac optymalne zapytania.
nie mowiac juz o projektowaniu bazy danych. pisza wiec byle jak.

j.
Go to the top of the page
+Quote Post

Posty w temacie


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: 27.12.2025 - 23:59