云数据库 GaussDB-实现:GIN快速更新技术

时间:2023-11-01 16:22:04

GIN快速更新技术

由于倒排索引的本身特性影响,更新一个GIN索引可能会比较慢。插入或更新一个堆行可能导致许多往索引的插入。当对表执行VACUUM后,或者如果待处理实体的列表太大了(大于work_mem),这些实体被使用和初始索引创建时用到的相同的bulk插入方法,移动到主要的GIN数据结构。即使把额外的VACUUM开销算进去,这也大大提升了GIN索引更新的速度。而且,这种额外开销的工作可以通过后台进程而不是前端查询来处理。

这种方法的主要缺点在于搜索时除了常规的索引还必须要扫描待处理实体的列表。因此,大的待处理实体的列表会显著的拖慢搜索。另一个缺点是,虽然大多数更新很快,但是一个导致待处理列表(pending list)变得“太大”的更新将引发一个立即清理,并因此比起其它更新会非常慢。恰当的使用autovacuum可以弱化这两个问题。

如果一致的响应时间(清理实体速度和更新速度的响应时间)比更新速度更重要,可以通过把GIN索引的存储参数FASTUPDATE设置为off而不使用待处理实体。详细请参考CREATE INDEX

support.huaweicloud.com/centralized-devg-v2-opengauss/devg_03_0678.html