Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Które zapytanie szybsze i lepsze?
Forum PHP.pl > Forum > Bazy danych
spenalzo
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
Ale przecież tu masz dwa różne zestawy tabel to co tu porównywać?
spenalzo
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
Wydaje mi sie to to nie sa rownoznaczne zapytania, w tym drugim stosujesz INNER JOIN'a a to nie to samo...
spenalzo
Proszę o wyjaśnienie...
orson
witam ...

a rezultat jest taki sam questionmark.gif to znaczy dostajesz to co chcesz questionmark.gif to chyba szybsze jest to ktore szybciej sie wykonuje ...

wykonaj je w konsolowym kliencie i on podaje czas wykonania ... krotszy lepszy winksmiley.jpg

cya
spenalzo
Cytat
a rezultat jest taki sam questionmark.gif to znaczy dostajesz to co chcesz questionmark.gif to  chyba szybsze jest to ktore szybciej sie wykonuje ...

wykonaj je w konsolowym kliencie i on podaje czas wykonania ... krotszy lepszy winksmiley.jpg

Chodzi o teorię - które teoretycznie jest szybsze i/lub lepsze.
FiDO
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
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
Cytat
Ale to nie sa zapytania zwracajace taki sam wynik...


W tym przypadku sa. Zwroc uwage na warunki.
FiDO
Ups... faktycznie.
chfast
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.