【发布时间】:2015-08-20 06:00:43
【问题描述】:
我在 PostgreSQL 中有这个查询:
SELECT cte.*
FROM (
select ......
from A a
left join B b using (id)
left join C c on (c.cid=a.cid)
left join D d on (d.did=c.did)
left join E e on (e.eid=d.eid)
left JOIN ( F f
JOIN ( SELECT func() AS funcid) x ON f.fid = x.fid) ON a.id = f.id
left join G g on (g.gid=c.gid)
left join H h on (h.hid=c.hid)
where b.userid= first_param
order by .....
) as cte
where cte.issuedate=second_param
此查询使用 2 个参数运行:first_param 是 INTEGER 和 second_param 是 DATE - 它们都与表 B 的字段相关
此查询会在我的主工作屏幕上生成数据,因此它会被多次使用。
我的困境在于查询的结构,因为 first_param 和 second_param 处于查询的“不同级别”中分别地?此外,second_param 是从公用表表达式而不是直接从 B 访问的
换句话说...选择:
CREATE INDEX name_a
ON B
USING btree
(userid,issuedate);
或者:
CREATE INDEX name_aa
ON B
USING btree
(userid);
CREATE INDEX name_ab
ON B
USING btree
(issuedate);
索引的指导方针说,如果我们多次一起使用 2 列,那么我们应该一起索引它,但在这种情况下我不太确定......
你能建议吗?
【问题讨论】:
标签: sql postgresql