小编Gra*_*D71的帖子

在具有许多共享值的非常大的表上创建索引

我希望在具有许多非唯一值的字段上的大表(约 5000 万行)上创建索引。

表架构如下所示:

 Column |         Type          | Modifiers | Storage  | Stats target | Description 
--------+-----------------------+-----------+----------+--------------+-------------
 gid    | character varying(20) |           | extended |              | 
 word   | character varying(30) |           | extended |              | 
 stat   | double precision      |           | plain    |              | 
Has OIDs: no
Run Code Online (Sandbox Code Playgroud)

我想在 'word' 列上创建一个索引。有一个相当规律的模式,每个单词出现大约 1000 次。我需要做快速SELECT * FROM mytable WHERE word='something';查询。在这些表上创建常规 B 树索引需要大量时间,但确实可以显着提高性能。

由于几个原因,我现在对我的解决方案感到不舒服

(1) B-Tree 索引的选择不是特别积极。是否有替代索引方案在具有高度重复值的字段上表现更好?

(2) 我在一个生产环境中,这些表相当频繁地出现和消失。因为并非所有表都会被大量查询,所以我选择只在触发某些(数据库外)应用程序时在表上构建索引,这样我知道将在表+字段上执行 10k+ 次查询。然而,在创建索引时等待 20 分钟并不理想。情况很微妙;通过创建索引获得的优化与创建索引所需的初始 time-sink 竞争。是否有“更便宜”的索引可以创建?也许整体性能比 B-Tree 稍差,但初始创建成本更低?

postgresql index

4
推荐指数
1
解决办法
9455
查看次数

标签 统计

index ×1

postgresql ×1