delayed_job robi zapytanie tak regularnie:Jaki jest najbardziej optymalny indeks dla tego zapytania delayed_job na postgresie?
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
Moje logi na mojej dość dużym raporcie maszynowego DB, że zabierze ćwierć sekundy do uruchomienia. Mogę po prostu rzucić niektóre indeksy na wszystkich kolumnach, które są wybrane, ale prawdopodobnie mogę uzyskać większą wydajność z indeksu wielu kolumn.
Jaki jest najbardziej optymalny indeks dla wielu kolumn, które mogę utworzyć dla tego zapytania? Czy są jakieś narzędzia, które mogą mi to obliczyć? Wersja
aktualizacja
postgres: 9.1.3
jeden istniejący indeks: priorytet, run_at (o nazwie "delayed_jobs_priority")
z 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)
Czy istnieją jakieś indeksy? – swasheck
Jaki jest obecny plan wyjaśnień i jaka wersja PG jest włączona? – Kuberchaun
@JustBob i dodałem tę informację do mojego pytania teraz –