delayed_job 쿼리 정기적으로 다음과 같이 수행합니다postgres에 대한 delayed_job 쿼리에 가장 적합한 인덱스는 무엇입니까?
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
내 로그가 실행하는 분기 초 걸린다 내 꽤 큰 DB 머신 보고서. 내가 선택한 모든 열에 일부 색인을 던질 수 있지만 아마 다중 열 인덱스 밖으로 더 많은 성능을 얻을 수 있습니다.
이 쿼리에 가장 적합한 다중 열 인덱스는 무엇입니까? 나를 위해 이것을 계산할 수있는 도구가 있습니까?
갱신
포스트 그레스 버전 : 9.1.3
하나의 기존 인덱스 :
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)
기존 인덱스가 있습니까? – swasheck
현재 설명 플랜 및 PG 버전은 무엇입니까? – Kuberchaun
@JustBob 지금 내 질문에이 정보를 추가했습니다. –