spenalzo
26.10.2003, 20:33:19
Mam dwa zapytania:
[sql:1:dae5521c07]SELECT * FROM kontakt LEFT JOIN kontakt_logowanie ON (kontakt.id_kontakt=kontakt_logowanie.id_kontakt) where kontakt_logowanie.id_kontakt=$id_k[/sql:1:dae5521c07]
oraz
[sql:1:dae5521c07]SELECT k.* FROM kontakt k , kontakt_wiadomosci w WHERE k.ID_kontakt=w.od_ID_kontakt AND k.od_ID_kontakt=$id_k[/sql:1:dae5521c07]
Które lepsze i szybsze?
Chodzi o to co jest lepsze? Rozw. 1 czy 2.
adwol
26.10.2003, 21:13:13
Ale przecież tu masz dwa różne zestawy tabel to co tu porównywać?
spenalzo
26.10.2003, 21:20:09
Ups.... :oops:
[sql:1:8addc49e5e]SELECT *
FROM kontakt LEFT JOIN kontakt_logowanie ON (kontakt.id_kontakt=kontakt_logowanie.id_kontakt)
WHERE kontakt_logowanie.id_kontakt=$id_k[/sql:1:8addc49e5e]
vs.
[sql:1:8addc49e5e]SELECT k.*
FROM kontakt k , kontakt_logowanie w
WHERE k.ID_kontakt=w.ID_kontakt AND w.ID_kontakt=$id_k[/sql:1:8addc49e5e]
FiDO
26.10.2003, 22:08:05
Wydaje mi sie to to nie sa rownoznaczne zapytania, w tym drugim stosujesz INNER JOIN'a a to nie to samo...
spenalzo
26.10.2003, 22:14:52
Proszę o wyjaśnienie...
orson
26.10.2003, 22:50:40
witam ...
a rezultat jest taki sam

to znaczy dostajesz to co chcesz

to chyba szybsze jest to ktore szybciej sie wykonuje ...
wykonaj je w konsolowym kliencie i on podaje czas wykonania ... krotszy lepszy
cya
spenalzo
26.10.2003, 22:57:39
Cytat
a rezultat jest taki sam

to znaczy dostajesz to co chcesz

to chyba szybsze jest to ktore szybciej sie wykonuje ...
wykonaj je w konsolowym kliencie i on podaje czas wykonania ... krotszy lepszy

Chodzi o teorię - które teoretycznie jest szybsze i/lub lepsze.
FiDO
26.10.2003, 23:28:17
Ale to nie sa zapytania zwracajace taki sam wynik...
Na najprostszym przykladzie newsow i komentarzy do nich, przy INNER JOIN'ie dostaniesz w wyniku tylko te newsy do ktorych jest jakis komentarz, a przy LEFT JOIN'ie wszystkie newsy + komentarze do tych do ktorych one sa.
uboottd
26.10.2003, 23:33:16
W zasadzie lepsze bedzie to drugie (z inner joinem) z tego wzgledu, ze left join mowi optymalizerowi ze druga tabela jest zalezna od pierwszej, i on wtedy moze zaczac kombinowac od przegladania pierwszej przechodzac na druga, natomiast dla inner joina optymalizer ma wolna reke i sam zdecyduje ktora tabela pojdzie na pierwszy ogien. I w tym przypadku najprawdopodobniej wybierze wlasnie druga z ktorej dzieki indexowi bedzie mial mniej wierszy do sklejenia z pierwsza tabela. Ogolnie polecam EXPLAIN ktory powie co optymalizer mysli o zapytaniu i jak bedzie je wykonywal.
uboottd
26.10.2003, 23:34:40
Cytat
Ale to nie sa zapytania zwracajace taki sam wynik...
W tym przypadku sa. Zwroc uwage na warunki.
FiDO
26.10.2003, 23:41:41
Ups... faktycznie.
chfast
27.10.2003, 00:00:12
Cytat
INNER JOIN i , (przecinek) są semantycznie równoważne. Oba dokonują pełnego złączenia wymienionych tabel. Zazwyczaj sposób łączenia podaje się w wyrażeniach warunkowych klauzuli WHERE.
Tak więc można chyba rozpatrywać różnicę między
JOIN a
LEFT JOIN. Według mnie
LEFT JOIN bliżej określa rodzaj połączenia więc jest lepsze.
Dodatkowo
do poczytania.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.