我正在将复合类型转换为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上的索引更快。
这就是现场演示的样子:http://rextester.com/KPNQ26624
实际数据具有更多的key->值对,因此性能会降低甚至更多,以至于jsonb作为简单的key->值存储只是毫无价值。 任何想法为什么会发生这种情况以及如何解决?