Wysoki poziom: Czy mogę to zrobić order by
, group by
podstawie sum
szybciej? (Str. 8,4, FWIW, na non-mały stolik .... myśleć O (miliony wierszy))poprawa algorytmu na proste wyglądających zapytania postgresql
Załóżmy miałem stół tak:
Table "public.summary"
Column | Type | Modifiers
-------------+-------------------+------------------------------------------------------
ts | integer | not null default nextval('summary_ts_seq'::regclass)
field1 | character varying | not null
otherfield | character varying | not null
country | character varying | not null
lookups | integer | not null
Indexes:
"summary_pk" PRIMARY KEY, btree (ts, field1, otherfield, country)
"ix_summary_country" btree (country)
"ix_summary_field1" btree (field1)
"ix_summary_otherfield" btree (otherfield)
"ix_summary_ts" btree (ts)
a zapytanie chcę jest :
select summary.field1,
summary.country,
summary.ts,
sum(summary.lookups) as lookups,
from summary
where summary.country = 'za' and
summary.ts = 1275177600
group by summary.field1, summary.country, summary.ts
order by summary.ts, lookups desc, summary.field1
limit 100;
(angielski: top 100 pole1 pod adresem konkretnej (TS, kraj) gdzie 'Topness' jest sumą wyszukiwań dla każdego pasującego rzędu, niezależnie od wartości otherfield)
Czy istnieje cokolwiek Naprawdę mogę to przyspieszyć? Algorytmicznie wydaje się to być skanowaniem pełnoekranowym, ale być może czegoś mi brakuje.
+1: Ładnie sformatowany i używa sekwencji do zapełnienia pliku! –
'LIMIT 100' oznacza, że zwracane jest tylko 100 wierszy, a nie 100 najlepszych dla każdego ts/kraju/etc. –
Końcówka formatowania dla SO, pamiętaj, aby umieścić to wszystko małymi literami, o dziwo :) –