Skocz do zawartości
Zaloguj się, aby obserwować  
smartpointer

co jest bardziej przyjazne dla serwera?

Polecane posty

czy należy za wszelką cenę zmniejszać ilość zapytań do bazy?

 

taki przykład:

Czy lepiej robić tak:

$res1 = mysql_query ("SELECT a FROM tab1 WHERE id = '1'");

$res2 = mysql_query ("SELECT b FROM tab2 WHERE id = '1'");

$res3 = mysql_query ("SELECT c FROM tab3 WHERE id = '1'");

$res4 = mysql_query ("SELECT d FROM tab4 WHERE id = '1'");

$res5 = mysql_query ("SELECT e FROM tab5 WHERE id = '1'");

$res6 = mysql_query ("SELECT f FROM tab6 WHERE id = '1'");

 

Czy tak:

$res = mysql_query ("SELECT tab1.a, tab2.b, tab3.c, tab4.d, tab5.e, tab6.f FROM tab1, tab2, tab3, tab4, tab5, tab6 WHERE tab1.id = '1' AND tab2.id ='1' AND tab3.id='1' AND tab4.id='1' AND tab5.id='1' AND tab6.id='1'");

 

w pierwszym przypadku zapytań jest aż 6, ale za to są proste; w drugim zapytanie jest tylko jedno ale bardzo złożone

 

Co najmniej obciąży serwer?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

do odpowiedzy niejestem pewny ale wydaje mi się że drugi ale niejestem w 100% pewien

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Raczej metoda pierwsza. Robiłem kiedyś mocno złożoną wyszukiwarkę, która pobierała jednym zapytaniem dane z wielu tabel i zapytanie wykonywało się na localhoscie 16 sekund! Rozbiłem to na kilka zapytań + grupowanie wyników w PHP i całość (lokalnie) wykonywała się sekundę. Podobnych sytuacji nie miałem zbyt wiele, bo nie tworzę zapytań pobierających dane z mnóstwa tabel.

 

Aha, serwis klienta był tworzony ok. 5 lat temu. Jedno z zapytań jest tak skomplikowane, że nawet home.plsię wykrzaczył (503, service temporarily unavailable. server is temporarily overloaded)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Co najmniej obciąży serwer?

 

W tym przypadku zdecydowanie metoda druga.

 

//edit:

na potwierdzenie mojej tezy:

metoda pierwsza wywolana 50000 razy - 32 sekundy

metoda druga - 9 sekund

 

 

 

pzdr.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dziękuję za odpowiedzi. Rzeczywiście jedno złożone wykonuje się szybciej. Nie byłem pewien, czy czas wykonania jest wystarczającym kryterium do oceny obciążenia serwera.

 

...zapytanie wykonywało się na localhoscie 16 sekund!...

...Aha, serwis klienta był tworzony ok. 5 lat temu...

 

Zapewne przez te 5 lat wiele się zmieniło.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jedno złożone wykonuje się szybciej... ale gdy w tabelach nie jest dużo danych. Załóżmy że w każdej z tabel masz po 1000 rekordów. Przy jednym złożonym zapytaniu masz silnik bazy ma duuużo do zrobienia. Ewentualnie w phpMyAdmine przed zapytaniem daj EXPLAIN, moze to trochę rozjaśni sytuację.

 

Zapewne przez te 5 lat wiele się zmieniło.

Tak.. danych przybyło.. złożone zapytanie wyszukiwarki trzeba było rozbić na mniejsze zapytania.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Jedno złożone wykonuje się szybciej... ale gdy w tabelach nie jest dużo danych. Załóżmy że w każdej z tabel masz po 1000 rekordów. Przy jednym złożonym zapytaniu masz silnik bazy ma duuużo do zrobienia. Ewentualnie w phpMyAdmine przed zapytaniem daj EXPLAIN, moze to trochę rozjaśni sytuację.

 

Przy 5000 rekordach nadal bedzie szybciej jednym zlozonym zapytaniem :(

 

Ale zgadzam sie, ze przy tabelach, gdzie jest bardzo duzo rekordow szybciej wyjdzie uzyc kilka prostych zapytan.

 

pzdr.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×