有了这张桌子:
CREATE TABLE bins (
id SERIAL PRIMARY KEY,
start TIMESTAMP NOT NULL,
bits BIT(16) NOT NULL,
topleft POINT, -- (x,y) in web mercator projection
count INTEGER
);
CREATE INDEX ON bins USING gist(topleft);
如何创建复合索引,以便我可以有效地运行查询,例如:
SELECT SUM(packets) FROM bins
WHERE (start BETWEEN '2023-10-30' AND '2023-10-31')
AND bits = B'0000000000001001'
AND topleft <@ BOX '(90500000000,135800000000)(90600000000,135900000000)';
(综合指数,不涉及要点,不是问题。)
我发现我需要使用
CREATE EXTENSION btree_gist;
,然后我可以使用:
CREATE INDEX ON bins USING gist(start, bits, topleft);
我不确定这是否是最好的解决方案。