千家信息网

PostgreSQL DBA(52) - Index(RUM)

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本节简单介绍了PostgreSQL中的RUM索引,包括RUM索引的基础知识和结构等.RUM索引是GIN索引的增强版.GIN索引一是只存储词素没有存储分词后的词素的位置信息,因此在Recheck(扫描验
千家信息网最后更新 2025年02月01日PostgreSQL DBA(52) - Index(RUM)

本节简单介绍了PostgreSQL中的RUM索引,包括RUM索引的基础知识和结构等.
RUM索引是GIN索引的增强版.GIN索引一是只存储词素没有存储分词后的词素的位置信息,因此在Recheck(扫描验证词素是否满足查询条件)的时候效率相对较低,二是搜索通常会按相关性的强弱排序返回,但GIN没有这些信息,只能通过计算后返回.
RUM索引可以避免上述2个问题.

简介
相对于GIN索引,RUM索引,每个词素不仅仅引用表中的行(TIDs),还包括词素在文档中出现的位置链表.
看下面的例子:

testdb=# create extension rum;CREATE EXTENSIONtestdb=# create index on ts using rum(doc_tsv);CREATE INDEXtestdb=# select ctid, left(doc,20), doc_tsv from ts;  ctid  |         left         |                         doc_tsv                         --------+----------------------+--------------------------------------------------------- (0,10) | Can a sheet slitter  | 'sheet':3,6 'slit':5 'slitter':4 (0,11) | How many sheets coul | 'could':4 'mani':2 'sheet':3,6 'slit':8 'slitter':7 (0,12) | I slit a sheet, a sh | 'sheet':4,6 'slit':2,8 (0,13) | Upon a slitted sheet | 'sheet':4 'sit':6 'slit':3 'upon':1 (0,14) | Whoever slit the she | 'good':7 'sheet':4,8 'slit':2 'slitter':9 'whoever':1 (0,15) | I am a sheet slitter | 'sheet':4 'slitter':5 (0,16) | I slit sheets.       | 'sheet':3 'slit':2 (0,17) | I am the sleekest sh | 'ever':8 'sheet':5,10 'sleekest':4 'slit':9 'slitter':6 (0,18) | She slits the sheet  | 'sheet':4 'sit':6 'slit':2(9 rows)

其结构如下:

TODO

参考资料
Indexes in PostgreSQL - 8 (RUM)
RUM

0