可以说我有一个博客数据库,其中posts表将标签存储在hstore中。 键代表标签ID,值是标签名称。
前任 : 1=>'Test', 56=>'SQL', 42=>'Java'
1=>'Test', 56=>'SQL', 42=>'Java'
我想对带有标签过滤器的帖子进行优化选择。我应该如何以及在标签列上创建哪种类型的选择以优化此查询
SELECT * FROM posts WHERE tags?'4'
问题是我没有可预测的键名,无法根据它们的值创建索引。
在列上创建摘要索引是否是一个好的解决方案? 以及如何使其将键视为整数?
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
但这似乎不是您的选择。
hstore``text仅存储,不存储integer。每个文档:
hstore``text
integer
键和值只是文本字符串。