![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 3.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam dosc spora tabele ktora trzyma staty odwiedzin (kilka milionow rekordow) chce dostac ilosc unikalnych odwiedzin na stronie nr "3" od poczatku lutego:
indexy btree sa na klikniete_data oraz na strona_id niby proste zapytanie ale bardzo dlugo mieli i zamula caly serwer. explain daje cod takiego: Kod Limit (cost=128878.77..128878.78 rows=1 width=17)
-> Aggregate (cost=128878.77..128878.78 rows=1 width=17) -> Bitmap Heap Scan on staty (cost=224.93..128846.64 rows=12850 width=17) Recheck Cond: (strona_id = 3) Filter: ((date_trunc('month'::text, klikniete_data))::text > '3'::text) -> Bitmap Index Scan on strona_id_idx (cost=0.00..224.93 rows=38551 width=0) Index Cond: (strona_id = 3) |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
jaki wynik i explain da zapytanie
? -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 3.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
witam,
ciagle nie moge znalezc skutecznego rozwiazania dla tego problemu: stworzylem sobie widok ktory wyciaga staty z kwietnia jedynie: create view kwiecien_stats as select from kliki gdzie data z kwietnia.. tyle tylko ze nie wiem po co ten widok jest skoro zapytanie zapuszczone na tym wiidoku i tak mieli 40000 rekordow(tak mowi explain), czyli zachowuje sie tak jak byloby zapuszczone na tabeli glownej "staty".. a widok ma tylko 1500 wierszy.. nie rozumiem tego.. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 18.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
witam
hmm... a czy przypadkiem date_trunc nie daje ci innego wyniku ![]() Cytat Examples: SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40'); Result: 2001-02-16 20:00:00 SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40'); Result: 2001-01-01 00:00:00 więc wg mnie zapytanie powinno wyglądać raczej tak (przy typie TIMESTAMP dla pola klikniete_data): Cytat("SQL") select count(distinct(ip)) from staty where date_trunc('month', klikniete_data) >= '2007-02-01 00:00:00' and strona_id = 3 ; Ewentualnie przy takiej ilości danych sugeruję utworzyć dodatkową tabelę w której będą odpowiednio już przetworzone (statystyki miesięczne, roczne itp). Czasochłonną operację wykonasz raz (np. za m-c luty 2007 - przy takiej ilości danych to rozwiązanie będzie efektywniejsze), i później możesz z wyników korzystać do woli ![]() ![]() pozdrawiam Ten post edytował wojtekmki 18.04.2007, 14:16:24 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Odpowiedz na moje pytanie....
-------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 18.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 380 Pomógł: 2 Dołączył: 5.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
DeyV zadal tylko jedno pytanie wiec za duzego wyboru nie masz...
-------------------- Wybierasz się do Zakopanego? Odwiedź Willę Pod Górami. Następnym razem na pewno do niej wrócisz :)
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 18.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
DeyV zadal tylko jedno pytanie wiec za duzego wyboru nie masz... hmm... Kod select count( ip ) from staty where date_trunc('month', klikniete_data) > 1 and strona_id = 3; wg mnie zliczy wszystkie ip "jak leci" dla strona_id = 3 Kod select count(distinct(ip)) from staty where date_trunc('month', klikniete_data) > 1 and strona_id = 3; to zliczy ilość unikalnych dla strona_id = 3 ale może się mylę... Jednak przy dużych ilościach danych osobiście wolę "generować" tego typu wyniki raz i zapisywać je w tabeli - często w przyszłości się przydają. pozdrawiam PS. a jakie masz założone indeksy ![]() ![]() Kod CREATE INDEX nazwa ON tabela USING btree (date_trunc('month', klikniete_data),strona_id); piszę "z palca" więc sprawdź czy zadziała Ten post edytował wojtekmki 19.04.2007, 11:22:00 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
ehh - chodzi właśnie o explain tego mojego zapytania.
Dlaczego? Bo chciałem sprawdzić, czy czasem za problemy z wydajnością nie jest odpowiedzialny brak indexu na IP. -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 23:21 |