什么样的索引有助于加快我的加入?

时间:2014-09-10 02:07:51

标签: sql postgresql

我有两个表, meta (一个小表)和 metastatus (一个巨大的表)。我在 ipaddr 列上有索引,我将用它来加入它们。

我的查询是

select m.ipaddr, m.machineclass
from meta m
join metastatus s on s.ipaddr = m.ipaddr
where m.machineclass = 'atm'
limit 1000;

这是plan

显然,未使用 metastatus 上的 ipaddr 索引。我想得到一些建议。在这种情况下添加索引会有帮助吗?或者我该怎么做才能加快查询速度?

更新 metastatus 上的 ipaddr 索引是聚集索引。我觉得这很重要吗?

2 个答案:

答案 0 :(得分:0)

你的元表应该在(机器类)上有一个索引来限定你的where子句。正如你已经指出的那样,元状态应该在(ipaddr)上。

答案 1 :(得分:0)

我认为它与你的聚簇索引没有任何关系。

要使此查询有效工作,您应该在(machineclass, ipaddr)表中创建复合索引meta

CREATE INDEX meta_machineclass_ipaddr_idx (machineclass, ipaddr);

只要machineclass = 'atm'具有高选择性(或者所有行的不到10%为'atm'类),这应该可以正常工作。