Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: where czy Join on
Forum PHP.pl > Forum > Bazy danych > MySQL
Thuunder
jak w temacie.
Zastanawiam się gdzie jest lepiej (optymalnie) umieścić warunek
czy w
where pole = 1
czy może join x on (złączenie) and pole = 1 ?

viking
Bez sensu pytanie. 2 różne warunki. Zrób sobie analyze i masz odpowiedź.
Thuunder
Chodziło Ci chyba o explain... ?
Jeśli uważasz, że bez sensu pytanie to nie odpowiadaj na nie, chyba, że tylko chodzi o licznik postów.. to co innego.
alegorn
pytanie nie jest tak bez sensu.

nie ma jednoznacznej odpowiedzi, bo bywa tak i tak (zalezne od zapytania, bazy i hardware.)


optymalizacja nie jest prosta, i nie ma jednego lekarstwa na wszystko. zalezy to od masy czynnikow..

tak czy inaczej przy pisaniu polecen, trzea sie kierowac kilkoma regulami, o ktorych jesli temat cie zaciekawi - duzo znajdziesz w necie.

ogolna zasada brzmi :
* jesli piszesz relacyjnie zapytanie,to im wiecej informacji posylasz optymalizatorowi - tym lepiej. (czasem od tego moze zglupiec ale to juz inna para kaloszy, wtedy trzeba go prowadzic za reke)
* dobra zasada jest by warunki najbardziej ograniczajace wynik - dawac jak najwczesniej.


a tak naprawde, to:

1. napisz zapytanie na oba sposoby
2. potraktuj explain'em
2.a - sprawdz czy i w czym sie roznia, jesli nie widzisz zadnej roznicy - to znaczy ze optymalizator oba zapytania sprowadza do jednej postaci. roznica czasow wtedy nie powinna byc zauwazalna.
2.b jesli sie roznia - najlepszy bedzie ten ktory do wyniku potrzebuje jak najmniejszej ilosci rekordow przeszukac

3. sprawdz czasy wykonania (pamietaj by wylaczyc qc)

jesli nie masz jednoznacznej odpowiedzi po 3 pkt. :
5. wlacz profilowanie zapytan
6. wykonaj oba zapytania, i sprawdz w czynnikach pierwszych co jest ograniczeniem.(tutaj mozna sprawdzic min. ile czasu potrzebuje optymalizator i wiele innych ciekawych opcji)


na koniec : to ze przetestujesz na swojej maszynie - nie oznacza ze, na innym serwerze nie otrzymasz innych wynikow.. sprawdz to tez w jakichs stres testach
a jesli po tym wszystkim nadal cie nie satysfakcjonuje wynik - przemysl od nowa caly pomysl. byc moze inne podejscie do problemu da lepsze rezultaty, ewentualnie podrasuj ustawienia serwera wink.gif

j.
viking
Jest bez sensu bo zadałeś pytanie gruszki czy jabłka bez żadnych szczegółów. Mamy strzelać co za indeksy masz, jak wygląda złączenie i twoje warunki ograniczające? Na 99% przypadków plan zapytania będzie identyczny bo podstawowy from tab1,tab2 where jest równoznaczny z join. Nabijanie postów? Mała matematyka, co da lepszy wynik? 40 pomógł na 380 postów czy 1 na 234?
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.