回答

收藏

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

技术问答 技术问答 239 人阅读 | 0 人回复 | 2023-09-12

可以说我有一个博客数据库,包括posts将标签存储在表中hstore中。4 M2 r- A! S& h+ V5 l5 A( x
键代表标签ID,值是标签名称。% [/ `. p+ n% X, Y+ z5 J$ Z
前任 : 1=>'Test',56=>'SQL',42=>'Java', }' G, `0 o& p
我想优化带有标签过滤器的帖子。我应该如何选择在标签列上创建哪种类型来优化这个查询?7 T- K& z$ G' G- h
SELECT * FROM posts WHERE tags?'4'问题是我没有可预测的键名,也不能根据它们的值创建索引。
+ C% R8 X& @7 B3 O2 Y9 r& G在列表中创建摘要索引是一个很好的解决方案吗?
2 P0 W) S: R: H4 M以及如何将键视为整数?- k2 e5 S, s+ K4 p* }9 x  f8 X
                                                                - L: m! E" P4 ?6 E
    解决方案:                                                                - r3 c6 G4 Q, c- j; d
                                                                GIN索引可能是更好的选择:9 H+ m0 e8 S$ h2 P4 b: H
CREATE INDEX posts_tags_idx ON posts USING gin (tags);这适用于 所有    键。
9 d5 F- [& |# {( |7 n0 }. R若查询仅针对具有部分索引的特定键,则可进一步优化索引:0 N# \% [6 A) t* {7 c1 _
CREATE INDEX posts_tags_idx ON posts USING gin (tags -> 4') WHERE x 4;hstore ? text …
% _% b& \* ?$ w" {& Bhstore是否包含密钥?; w6 A* `- e; B: @& Z3 V
但这似乎不是你的选择。
) ?6 b/ I5 G+ a. V: ?4 B, j7 Qhstore``text只存储,不存储integer。每个文档:2 K$ x9 K5 m* E; l/ |7 I
键和值只是文字字符串。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则