de alto nivel: ¿Puedo hacer esto order by
, group by
basa en sum
más rápido? (Pág. 8.4, fwiw, en una pequeña mesa no pensar .... O (millones de filas))mejora del algoritmo en una simple consulta PostgreSQL mirando
Supongamos que tenía una tabla como la siguiente:
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)
Y la pregunta que quiero es :
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;
(Inglés: top 100 de campo1 en una determinada dirección (ts, país), donde 'topness' es la suma de operaciones de búsqueda para cualquier fila coincidente, sin importar el valor de otherfield)
¿hay cualquier cosa Realmente puedo hacer para acelerar esto? Algorítmicamente esto parece ser una exploración de tabla completa, pero me podría estar perdiendo algo.
+1: ¡Bien formateado, y usa una secuencia para poblar el pk! –
'LIMIT 100 'significa que solo se devolverán 100 filas, no las 100 principales para cada ts/país/etc. –
Consejo de formato para SO, recuerde ponerlo todo en minúsculas, por extraño que parezca :) –