Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL] zliczenie wierszy w dwóch tabelach
peter13135
post
Post #1





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


  1. SELECT portal_posts.COUNT(id) AS count_posts, portal_topics.COUNT(id) AS count_topics FROM portal_posts, portal_topics


chyba można sie domyśleć co chcę osiągnąć, proszę o poprawne zapytanie


--------------------
:)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
webber
post
Post #2





Grupa: Zarejestrowani
Postów: 107
Pomógł: 19
Dołączył: 30.10.2007

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


http://forums.devarticles.com/general-sql-...ables-1849.html


--------------------
"CSS is like a girlfriend. No matter how hard you try, she will always interpret it a different way."
Go to the top of the page
+Quote Post
peter13135
post
Post #3





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


hmm, jakoś wolno mi to działa

bez tych wszystkich zapytań czas generowania strony wynosi średnio 0.045s
gdy dodam do skryptu to zapytanie - czas generowania wynosi około 0.8s

wynik zapytania jest taki

count_posts count_users count_topics
45003 11 5

  1. SELECT COUNT( DISTINCT portal_posts.id ) AS count_posts, COUNT( DISTINCT portal_users.id ) AS count_users, COUNT( DISTINCT portal_topics.id ) AS count_topics
  2. FROM portal_posts, portal_users, portal_topics


gdy trochę uszczuplę to zapytanie do takiej postaci
  1. SELECT
  2. COUNT(DISTINCT portal_posts.id) AS count_posts,
  3. COUNT(DISTINCT portal_topics.id) AS count_topics FROM portal_posts, portal_topics"


to czas generowania strony wynosi 0.2s

czyli sporo lepiej, jednak dlaczego i tak za dużo jak na tabele z 11 wierszami, czym to jest spowodowane questionmark.gif

edit:// zapytanie typu

  1. SELECT COUNT(id) FROM portal_users


(bez wyraźnej róznicy z której tabeli pobieram dane) "spowalnia" stronę do 0.055, czyli niewiele w porównaniu do tych powyższych wyników, moim zdaniem lepiej by było zrobić 3 osobne zapytania, skoro działają one znacznie szybciej, jednak ten fakt wydaje mi się dziwny

nikt nie pomoże ?

Ten post edytował peter13135 30.06.2009, 23:59:32


--------------------
:)
Go to the top of the page
+Quote Post
alegorn
post
Post #4





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


3 osobne pytania? nie...
to tylko na localhoscie ci sie szybciej wykona niz na obciazanym serwerze...
optymalizuj ilosc zapytan - bo moze sie okazac ze zapychasz serwer ich sama iloscia...

pozakladaj indexy odpowiednie, sprawdz EXPLAIN ..

poza tym, o ile dobrze mysle to to jest o kilka poziomow nieba bardziej optymalne:

  1. SELECT
  2. (SELECT COUNT(portal_posts.id) FROM portal_posts) AS count_posts,
  3. (SELECT COUNT(portal_users.id) FROM portal_users) AS count_users,
  4. (SELECT COUNT( DISTINCT portal_topics.id ) FROM portal_topics) AS count_topics


od:
  1. SELECT COUNT( DISTINCT portal_posts.id ) AS count_posts, COUNT( DISTINCT portal_users.id ) AS count_users, COUNT( DISTINCT portal_topics.id ) AS count_topics
  2. FROM portal_posts, portal_users, portal_topics


w tym drugim zapytaniu robisz bezsensowne polaczenia miedzy tabelami... i to do tego w iloczynie kartezjanskim czyli:
query = count( a ) * count( b ) * count( c ), a pozniej zliczasz unikaty w query... jesli masz nawet po 10 rekordow w tabelach to query wylicza juz 1000 rekordow... i jak tu sie dziwic ze spowalnia...? :]
za cos takiego, na duzych tabelach kazdy admin cie powiesi :]

Ten post edytował alegorn 1.07.2009, 08:58:38
Go to the top of the page
+Quote Post
peter13135
post
Post #5





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


cóż... taki sposób znalazłem na na stronie do której link otrzymałem od webber'a
więc go użyłem, do tej pory nigdy nie łączyłem tabel.. nawet nie używałem funkcji count() w mysql, więc zwyczajnie niemam pojęcia jak sie tym posługiwać, i co jest optymalne


--------------------
:)
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 Aktualny czas: 20.08.2025 - 10:07