我正在将复合类型转换为NoSQL类型之一,并已对hstore和jsonb进行了性能测试 . 由于某种原因,jsonb越慢,键值对越多 .

我目前的类型如下: create type comp_type (key integer, value integer);

它作为数组 create table test_table (id serial, values comp_type[]); 存储在表中

这很好,直到我需要获得在复合类型数组中具有某些键的行,并且执行此操作的唯一方法是 unnest() ,这是昂贵的 . 所以我决定将这种数据类型迁移到hstore或jsonb中,因为它们都提供了我需要的运算符( ?| ) .

在seq扫描期间和使用gin索引时,hstore都更快 . 我承认hstore上的gin索引要比jsonb的等价物贵得多,但即使这样,在hstore上执行seq扫描比在jsonb上使用index更快 .

这就是现场演示的样子:http://rextester.com/KPNQ26624

实际数据具有更多的键 - >值对,因此性能会降低甚至更多,以至于jsonb就像简单的key-> value store一样毫无 Value . 任何想法为什么会发生以及如何解决?