对于范围查找快速索引表(Fast table indexing for range lookup)

2019-09-21 22:35发布

我有大约450万行的Postgres的表。 列基本上只是

low BIGINT,
high BIGINT,
data1,
data2, 
...

当查询该表,你有一个长整型,并希望找到对应的范围内的数据lowhigh ,其中包括该值。 什么将是指数的最佳途径此表快速查找?

Answer 1:

一个多列索引具有反向排序顺序:

CREATE INDEX tbl_low_high_idx on tbl(low, high DESC);

这样一来,该指数可以扫描前进到low是够高的话采取一切行,直到high太低-在一个扫描。 这就是为什么主要原因排序顺序实施了指标开始说起:不同的排序顺序在不同的顺序多列索引相结合。 基本上,B树索引可以在两个方向上以几乎相同的速度穿过,所以ASC / DESC很难被需要单列索引。


您还可能有兴趣在新的范围类型 的PostgreSQL 9.2。 可以用其主旨在于索引进行索引是这样的:

CREATE INDEX tbl_idx ON tbl USING gist (low_high);

应该让这种形式的查询执行速度非常快:

SELECT * FROM tbl WHERE my_value <@ low_high;

<@作为运算符“元件由载” 。



文章来源: Fast table indexing for range lookup