Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Które zapytanie szybsze i lepsze?
spenalzo
post 26.10.2003, 20:33:19
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.


--------------------

Go to the top of the page
+Quote Post
adwol
post 26.10.2003, 21:13:13
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ć?
Go to the top of the page
+Quote Post
spenalzo
post 26.10.2003, 21:20:09
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]


--------------------

Go to the top of the page
+Quote Post
FiDO
post 26.10.2003, 22:08:05
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...
Go to the top of the page
+Quote Post
spenalzo
post 26.10.2003, 22:14:52
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...


--------------------

Go to the top of the page
+Quote Post
orson
post 26.10.2003, 22:50:40
Post #6





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

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


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
Go to the top of the page
+Quote Post
spenalzo
post 26.10.2003, 22:57:39
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 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.


--------------------

Go to the top of the page
+Quote Post
FiDO
post 26.10.2003, 23:28:17
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.
Go to the top of the page
+Quote Post
uboottd
post 26.10.2003, 23:33:16
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.
Go to the top of the page
+Quote Post
uboottd
post 26.10.2003, 23:34:40
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.
Go to the top of the page
+Quote Post
FiDO
post 26.10.2003, 23:41:41
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.
Go to the top of the page
+Quote Post
chfast
post 27.10.2003, 00:00:12
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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 18:45