6

delayed_job hace una consulta como la siguiente regularidad:¿Cuál es el índice más óptimo para esta consulta de retraso de trabajo en postgres?

SELECT "delayed_jobs".* 
FROM "delayed_jobs" 
WHERE ((run_at <= '2012-05-23 15:16:43.180810' AND (locked_at IS NULL OR locked_at < '2012-05-23 11:16:43.180841') OR locked_by = 'host:foo pid:1') AND failed_at IS NULL) 
ORDER BY priority ASC, run_at ASC LIMIT 5 

Mis registros en mi informe bastante grande máquina de base de datos que se necesita un cuarto de segundo para funcionar. Podría simplemente lanzar algunos índices en todas las columnas que están seleccionadas, pero probablemente pueda obtener más rendimiento de un índice de varias columnas.

¿Cuál es el índice más óptima de varias columnas que puedo hacer para esta consulta? ¿Hay alguna herramienta que pueda calcular esto para mí?

actualización

postgres versión: 9.1.3

existente índice: prioridad, run_at (llamado "delayed_jobs_priority")

de explain analyze:

Limit (cost=0.00..219.65 rows=5 width=1154) (actual time=0.727..0.727 rows=0 loops=1) 
    -> Index Scan using delayed_jobs_priority on delayed_jobs (cost=0.00..351.43 rows=8 width=1154) (actual time=0.725..0.725 rows=0 loops=1) 
     Filter: ((failed_at IS NULL) AND (((run_at <= '2012-05-23 18:11:03.980113'::timestamp without time zone) AND ((locked_at IS NULL) OR (locked_at < '2012-05-23 14:11:03.98014'::timestamp without time zone))) OR ((locked_by)::text = 'host:foo pid:1'::text))) 
Total runtime: 0.754 ms 
(4 rows) 
+0

¿Hay algún índice existente? – swasheck

+1

¿Cuál es el plan de explicación actual y en qué versión de PG está usted? – Kuberchaun

+0

@JustBob i añadió esta información a mi pregunta ahora –

Respuesta

0

I no creo que un índice de múltiples columnas sea de mucha utilidad en este caso. Use múltiples índices de una sola columna.

1

Dado que tiene una cláusula LIMIT, es posible que desee un índice de ordenamiento en lugar de un filtro, en (priority, run_at).

¿Cuál es el porcentaje de registros en la tabla que satisfacen la condición WHERE?

+0

El plan espera 10 tuplas para la exploración de índice, pero las estadísticas pueden ser incorrectas. – wildplasser

+0

@Quassnoi generalmente muy pequeño –

Cuestiones relacionadas