继我之前关于这个主题的问题之后,Postgres 结合了多个索引:
我在 Postgres 9.2(带有 postgis)上有下表:
CREATE TABLE updates (
update_id character varying(50) NOT NULL,
coords geography(Point,4326) NOT NULL,
user_id character varying(50) NOT NULL,
created_at timestamp without time zone NOT NULL
);
我正在表上运行以下查询:
select *
from updates
where ST_DWithin(coords, ST_MakePoint(-126.4, 45.32)::geography, 30000)
and user_id='3212312'
order by created_at desc
limit 60
因此,鉴于此,我应该为(coords + user_id)、GIST 还是 BTree 使用什么索引?
CREATE INDEX ix_coords_user_id ON updates USING GIST (coords, user_id);
或者
CREATE INDEX ix_coords_user_id ON updates (coords, user_id);
我读到 BTree 的性能比 GIST 好,但我是否被迫使用 GIST,因为我使用的是 postgis 地理字段?