postgresql 如何在Postgres中创建一个包含POINT的复合索引?

rbl8hiat  于 11个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(121)

使用此表:

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)';


(不涉及要点的综合指数不是问题。)

amrnrhlw

amrnrhlw1#

你的答案中的索引看起来不错。为了避免扫描不必要的索引条目,你应该把你与=比较的列放在第一位。在你的例子中,那就是bits

zz2j4svz

zz2j4svz2#

我发现我需要使用CREATE EXTENSION btree_gist;,然后允许我用途:

CREATE INDEX ON bins USING gist(start, bits, topleft);

字符串
我不确定这是否是最好的解决方案。

相关问题