我有一张包含大约1亿条记录和以下索引的表格:
Column | Type | Modifiers | Storage |
---------------------+--------------------------+------------------------------------------------------------+----------+--------------+-------------
id | integer | ... pk ...| plain |
url | character varying(500) | not null | extended |
description | text | | extended |
domain_id | integer | | plain |
index_status | integer | not null | plain |
索引:
我首先创建了index_status=0
索引,因为我想查询表:
select *
from mytable
where index_status = 0
limit 1000;
它工作得很好,但现在我也想这样查询:
select *
from mytable
where index_status = 0 and domain_id = 233
limit 1000;
因为你可以看到我现在用两个索引查询我的数据库,它工作得很好,因为我与domain_id
相关的记录大约是50,000
,所以它很快就在查询它们(约1s
)。
但现在我的记录与domain_id
的记录大约有3,000,000
个记录,大约需要10
分钟。
如果两个字段都被编入索引怎么办?我该怎么做才能加快这种查询速度?我应该创建一个新索引吗?
答案 0 :(得分:2)
您可以在多个列上创建过滤索引:
create index idx_mytable_3 on mytable(domain_id, id) where index_status = 0;
您可以将mytable_id_idx
替换为此。
注意:使用不limit
的{{1}}是可疑的。如果您希望以order by
顺序生成结果,则应明确包含id
。