Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> sql czy można to zapytanie przyśpieszyc
jagwie
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 6.01.2008

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


Witam posiadam poniższe zapytanie czy można to zapytanie przyśpieszyć .
w tym zapytaniu GROUP BY segreguje alfabetycznie miasta a potrzebuje aby segregowało według "COUNT(miasto) as liczba_obiektow" czyli od największej ilości obiektów w bazie
  1. SELECT COUNT(miasto) AS liczba_obiektow,id_miasta, miasto, powiat,region
  2. FROM oferty INNER JOIN miasta
  3. ON oferty.miasto = miasta.nazwa_miasta GROUP BY miasto
  4. HAVING region IN (12,11,14,15,17,18,19,70,20,21,22,23,24,25,27,28,30,32,31,48,68) LIMIT 5
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Wywal having i warunek stamtąd przenieś do WHERE
Poza tym bez struktury tabeli (SHOW CREATE TABLE) nie za bardzo można więcej powiedzieć.


--------------------
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


A czy nie mógłbyś tej liczby (liczba_obeitków) trzymać w formie statycznej w bazie danych (w dodatkowej kolumnie) i przy dodaniu/usunięciu rekordu z drugiej tabeli inkrementować/dekrementować tą wartość? Pozbyłbyś się całego COUNT().
Go to the top of the page
+Quote Post
jagwie
post
Post #4





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 6.01.2008

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


Z WHERE działa zdecydowanie szybciej

  1. SELECT COUNT( miasto ) AS liczba_obiektow, id_miasta, miasto, powiat, region
  2. FROM oferty
  3. INNER JOIN miasta ON oferty.miasto = miasta.nazwa_miasta
  4. WHERE region
  5. IN ( 12, 11, 14, 15, 17, 18, 19, 70, 20, 21, 22, 23, 24, 25, 27, 28, 30, 32, 31, 48, 68 )
  6. GROUP BY miasto
  7. LIMIT 5


A jeśli chodzi o strukturę tabeli to
tabela "Oferty " - miasto - region
tabela "Miasta" - id_miasta -powiat - nazwa_miasta

Cytat
A czy nie mógłbyś tej liczby (liczba_obeitków) trzymać w formie statycznej w bazie danych (w dodatkowej kolumnie) i przy dodaniu/usunięciu rekordu z drugiej tabeli inkrementować/dekrementować tą wartość? Pozbyłbyś się całego COUNT().


Na pewno byłaby taka możliwość liczba zmienia sie w czasie i musiałbym dopisać jakiś skrypcik w php aby odczytywał aktualny stan i zapisywał jako statycznną liczbę.
Chyba że jest jakiś inny sposób zliczania według ilości ofert w danej chwili.
Wolałbym wykombinować coś w zapytaniu
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Wystarczy utworzyć TRIGGER który zwiększy wartość o jeden przy dodawaniu, zmiejszy o jeden przy usuwaniu i ewentualnie jeszcze jeden by przy aktualizacji zmieniającej przynależność zmniejszyć o jeden w starym i zwiększyć o jeden w nowym.

To Ci najbardziej przyspieszy zapytanie bo wyeliminujesz zarówno COUNT() jak i GROUP BY.
Go to the top of the page
+Quote Post
jagwie
post
Post #6





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 6.01.2008

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


Dzięki za podpowiedz lecz nie wiem jak napisać taki trigger.
I nie wiem czy trigger musi zapisywać w tej tabeli w której te dane są wyciągane .
Chodzi mi o to że z tabeli "Oferty" można pobrać te dane ale nie da rady tam dodać kolumny Ilość ofert.
W drugiej tabeli " Miasta" natomiast występują takie same nazwy miast lecz z innego regionu i również taka kolumna jest wykluczona .


Po prostu nigdy nie interesowałem się triggerem i nie orientuję się jak to działa będę musiał coś o tym poczytać .
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 - 21:46