postgres上这个delayed_job查询的最佳索引是什么?

Joh*_*hir 6 sql postgresql multiple-columns delayed-job database-indexes

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
Run Code Online (Sandbox Code Playgroud)

我在相当大的数据库机器上的日志报告显示需要四分之一秒才能运行.我可以在所选的所有列上抛出一些索引,但我可以从多列索引中获得更多性能.

我可以为此查询创建的最佳多列索引是什么?有没有可以为我计算的工具?

更新

postgres版本:9.1.3

一个现有索引:priority,run_at(名为"delayed_jobs_priority")

出于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)
Run Code Online (Sandbox Code Playgroud)

Eel*_*lke 0

我认为在这种情况下多列索引没有多大用处。使用多个单列索引。