我有两个表,meta(一个小表)和metastus。我在ipaddr列上有索引,我将使用它来加入它们。
我的查询是
select m.ipaddr, m.machineclass
from meta m
join metastatus s on s.ipaddr = m.ipaddr
where m.machineclass = 'atm'
limit 1000;
这是计划。
显然,没有使用转移上的ipaddr索引。我想得到一些推荐。在这种情况下添加索引有帮助吗?或者我可以做些什么来加快查询速度?
更新:metastus上的ipaddr索引是聚集索引。我觉得这很重要?
我认为这与索引是否集群无关。
为了使此查询有效工作,您应该在meta
表中创建复合索引(machineclass, ipaddr)
:
CREATE INDEX meta_machineclass_ipaddr_idx (machineclass, ipaddr);
只要machineclass='atm'
具有高选择性(或者小于10%的所有行是'atm'
类),这就应该很好地工作。
您的元表应该在(machineclass)上有一个索引来限定where子句。元状态应该在(ipaddr)上,正如您已经指出的那样。