开发者社区 > 大数据与机器学习 > 实时数仓 Hologres > 正文

Hologres是因为这个条件导致jsonb类型走了pk的索引吗?

Hologres是因为这个条件导致jsonb类型走了pk的索引吗?

展开
收起
真的很搞笑 2023-12-03 20:14:59 53 0
3 条回答
写回答
取消 提交回答
  • 对的,我看查询里有用到jsonb->'key'这个操作符吧,那个版本比较旧了有个bug,建议可以顺便直接升级到2.0,此回答整理自钉群“实时数仓Hologres交流群”

    2023-12-05 10:00:59
    赞同 展开评论 打赏
  • 在PostgreSQL和Hologres中,JSONB类型的列默认是不允许作为主键(PK)的。如果你想让JSONB类型的列成为主键,你需要显式地声明它。

    当你在WHERE子句中使用JSONB类型的列时,如果这个列没有被定义为主键,那么查询可能会使用索引来加速查询。这就是为什么你可能会看到这个情况:即使你的查询中没有明确地指定索引用,但是查询仍然使用了索引。

    然而,这也取决于你的表的定义和数据的分布。如果你的表有一个主键,那么查询通常会使用主键索引来加速查询。如果你的表没有主键,那么查询可能会使用其他索引来加速查询。

    如果你想要更精确地控制查询的执行计划,你可以使用EXPLAIN命令来查看查询的详细执行计划。这样,你就可以清楚地看到查询使用了哪些索引来加速查询。

    2023-12-04 16:36:56
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    是的,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在执行时更加快速。

    2023-12-03 21:50:48
    赞同 展开评论 打赏

本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975

相关产品

  • 实时数仓 Hologres
  • 相关电子书

    更多
    实时数仓Workshop(广州站)- 李佳林 立即下载
    阿里云实时数仓Hologres技术揭秘2.0 立即下载
    实时数仓Hologres技术实战一本通2.0版(下) 立即下载