![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
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. -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Ale przecież tu masz dwa różne zestawy tabel to co tu porównywać?
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
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] -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi sie to to nie sa rownoznaczne zapytania, w tym drugim stosujesz INNER JOIN'a a to nie to samo...
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Proszę o wyjaśnienie...
-------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
witam ...
a rezultat jest taki sam ![]() ![]() wykonaj je w konsolowym kliencie i on podaje czas wykonania ... krotszy lepszy ![]() cya |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat a rezultat jest taki sam
![]() ![]() wykonaj je w konsolowym kliencie i on podaje czas wykonania ... krotszy lepszy ![]() Chodzi o teorię - które teoretycznie jest szybsze i/lub lepsze. -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ale to nie sa zapytania zwracajace taki sam wynik...
W tym przypadku sa. Zwroc uwage na warunki. |
|
|
![]()
Post
#11
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Ups... faktycznie.
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 222 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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. -------------------- pozdrawiam, chfast
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 18:45 |