Hologres是因为这个条件导致jsonb类型走了pk的索引吗?
对的,我看查询里有用到jsonb->'key'这个操作符吧,那个版本比较旧了有个bug,建议可以顺便直接升级到2.0,此回答整理自钉群“实时数仓Hologres交流群”
在PostgreSQL和Hologres中,JSONB类型的列默认是不允许作为主键(PK)的。如果你想让JSONB类型的列成为主键,你需要显式地声明它。
当你在WHERE子句中使用JSONB类型的列时,如果这个列没有被定义为主键,那么查询可能会使用索引来加速查询。这就是为什么你可能会看到这个情况:即使你的查询中没有明确地指定索引用,但是查询仍然使用了索引。
然而,这也取决于你的表的定义和数据的分布。如果你的表有一个主键,那么查询通常会使用主键索引来加速查询。如果你的表没有主键,那么查询可能会使用其他索引来加速查询。
如果你想要更精确地控制查询的执行计划,你可以使用EXPLAIN
命令来查看查询的详细执行计划。这样,你就可以清楚地看到查询使用了哪些索引来加速查询。
是的,Hologres中的jsonb类型数据的索引规则可能与您设想的不同。在Hologres中,jsonb_ops类型的GIN索引为JSONB数据中的每个key和value生成单独的索引项,而jsonb_path_ops则只为每个value创建一个索引。此外,从V2.0版本开始,Hologres支持对开启了列存的JSONB设置Bitmap索引,系统会解析出int、int[]、bigint、bigint[]、text、text[]、jsonb这7种数值类型。因此,如果您在使用jsonb类型并且发现查询行为不符合预期,可能是由于这些特殊的索引规则导致的。同时需要注意的是,建表时选择合适的索引,能够使SQL在执行时更加快速。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975