我有大约450万行的Postgres的表。 列基本上只是
low BIGINT,
high BIGINT,
data1,
data2,
...
当查询该表,你有一个长整型,并希望找到对应的范围内的数据low
和high
,其中包括该值。 什么将是指数的最佳途径此表快速查找?
我有大约450万行的Postgres的表。 列基本上只是
low BIGINT,
high BIGINT,
data1,
data2,
...
当查询该表,你有一个长整型,并希望找到对应的范围内的数据low
和high
,其中包括该值。 什么将是指数的最佳途径此表快速查找?
一个多列索引具有反向排序顺序:
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;
<@
作为运算符“元件由载” 。