Высокий уровень : Могу ли я сделать это order by
, group by
на основе sum
еще быстрее?(PG 8.4, fwiw., На не крошечной таблице .... думаю, O (миллионы строк))
Предположим, у меня была такая таблица:
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)
Изапрос, который я хочу:
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;
(на английском языке: 100 лучших полей1 в определенном месте (ts, страна), где 'topness' - это сумма поисков для любой подходящей строки независимо от значения другого поля)
Есть ли что-нибудь , что я действительно могу сделать, чтобы ускорить это?С алгоритмической точки зрения это похоже на сканирование всей таблицы, но я могу что-то упустить.