一尘不染

hstore中的索引,没有可预测的键

sql

可以说我有一个博客数据库,其中posts表将标签存储在hstore中。
键代表标签ID,值是标签名称。

前任 : 1=>'Test', 56=>'SQL', 42=>'Java'

我想对带有标签过滤器的帖子进行优化选择。我应该如何以及在标签列上创建哪种类型的选择以优化此查询

SELECT * FROM posts WHERE tags?'4'

问题是我没有可预测的键名,无法根据它们的值创建索引。

在列上创建摘要索引是否是一个好的解决方案?
以及如何使其将键视为整数?


阅读 120

收藏
2021-05-30

共1个答案

一尘不染

GIN索引可能是更好的选择:

CREATE INDEX posts_tags_idx ON posts USING gin (tags);

这适用于 所有 键。
如果查询仅针对具有部分索引的特定键,则可以进一步优化索引

CREATE INDEX posts_tags_idx ON posts USING gin (tags -> '4')) WHERE x ? '4';

hstore ? text
hstore是否包含密钥?

但这似乎不是您的选择。

hstore``text仅存储,不存储integer每个文档:

键和值只是文本字符串。

2021-05-30