我有两个表, 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 索引是聚集索引。我觉得这很重要吗?
答案 0 :(得分:0)
你的元表应该在(机器类)上有一个索引来限定你的where子句。正如你已经指出的那样,元状态应该在(ipaddr)上。
答案 1 :(得分:0)
我认为它与你的聚簇索引没有任何关系。
要使此查询有效工作,您应该在(machineclass, ipaddr)
表中创建复合索引meta
:
CREATE INDEX meta_machineclass_ipaddr_idx (machineclass, ipaddr);
只要machineclass = 'atm'
具有高选择性(或者所有行的不到10%为'atm'
类),这应该可以正常工作。