使用Postgres 9.4,我想在json列上创建一个索引,当在列内的特定键上进行搜索时将使用这个索引。JSON上的PostgreSQL索引
例如,我有一个'农场'表json列'动物'。
动物列具有通用格式的JSON对象:
'{"cow": 2, "chicken": 11, "horse": 3}'
我已经尝试了一些指标(单独):
(1) create INDEX animal_index ON farm ((animal ->> 'cow'));
(2) create INDEX animal_index ON farm using gin ((animal ->> 'cow'));
(3) create INDEX animal_index ON farm using gist ((animal ->> 'cow'));
我想运行之类的查询:
SELECT * FROM farm WHERE (animal ->> 'cow') > 3;
并让该查询使用该索引。
当我运行此查询:
SELECT * FROM farm WHERE (animal ->> 'cow') is null;
则(1)指数的作品,但我不能让任何指数为不平等的工作。
这样的索引可能吗?
农场桌只包含〜5000个农场,但其中一些包含100多个动物,并且查询对我的用例来说太长。像这样的索引是我能想到的用于加速查询的唯一方法,但也许还有另一种选择。
谢谢!精彩的回答。我只对第一级感兴趣。该值始终是一个整数。不过,我对其他一些动物感兴趣。简单地复制我感兴趣的每只动物的这个索引是否有意义? – lnhubbell
@lnhubbell:对于已知的,静态的,微不足道的动物数量,这应该是最简单和最有效的解决方案。不过,我会明确地让它们成为部分索引。见上面的附录。 –