开发者社区 > 数据库 > 数据仓库 > 正文

云原生数据仓库AnalyticDB PostgreSQL中看执行计划怎么是 ROWS 是7亿呢?

问题1:云原生数据仓库AnalyticDB PostgreSQL中两张表都是100多万数据join,key也看了是唯一的,看执行计划怎么是 ROWS 是7亿呢?dbef299c23857636a2f0a981f4e69e33.png
问题2:为啥会预估这么大啊? 查询返回结果要40s,我用了 bitmap 函数。

展开
收起
三分钟热度的鱼 2023-07-12 09:01:50 71 0
3 条回答
写回答
取消 提交回答
  • 在 AnalyticDB PostgreSQL 中,执行计划中的 "ROWS" 表示查询语句返回的估计行数。这个值是优化器根据统计信息和查询条件等因素进行估算的结果。

    如果您在执行计划中看到 "ROWS" 值为 7亿,这意味着优化器估计该查询将返回大约 7亿行的结果。这仅仅是一个估计值,并不代表实际查询结果的确切行数。

    在优化器生成执行计划时,它会基于表的统计信息、索引选择性和查询条件等数据来估计查询的行数。然而,由于统计信息可能不完全准确或查询条件复杂,实际返回的行数可能与预估值有所偏差。

    如果您对查询的行数估计存在疑问,可以考虑以下操作:

    1. 更新统计信息:使用 ANALYZE 命令更新相关表的统计信息,以确保优化器具备最新的数据分布和索引选择性信息。

    2. 检查查询条件:确保查询条件正确且合理,它们可以帮助优化器更准确地估计行数。

    3. 执行实际查询:执行查询并观察实际返回的行数,以验证优化器的估计是否准确。

    请注意,执行计划中的 "ROWS" 值只是一个估计值,实际结果可能会有所偏差。最终的返回行数受多个因素影响,包括数据分布、索引选择性、查询条件和集群负载等。

    2023-07-26 13:20:54
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    执行计划中的ROWS指的是执行计划中每个步骤(节点)处理的行数,而不是查询结果的总行数。因此,ROWS的值可能会受到多种因素的影响,例如查询的复杂度、索引的使用情况、数据分布等。

    在您的情况下,如果两张表都是100多万数据,join的key也是唯一的,那么执行计划中ROWS为7亿可能是由于以下原因导致的:

    数据分布不均衡:如果参与join的表数据分布不均衡,例如其中一张表的数据有很多重复,那么在join操作时会产生大量的中间结果,从而导致执行计划中ROWS的值变大。

    未使用索引或索引失效:如果join的key没有建立索引或者索引失效,那么在执行join操作时需要进行全表扫描,从而导致执行计划中ROWS的值变大。

    查询复杂度高:如果查询中包含复杂的子查询、聚合函数或者大量的计算,那么在执行计划中的每个步骤中处理的行数可能会变大,从而导致ROWS的值变大。

    2023-07-23 10:06:52
    赞同 展开评论 打赏
  • 针对问题1的回答:那是估算。看后面的 9249。此回答整理自钉群“云原生数据仓库AnalyticDB PostgreSQL版交流群”

    2023-07-12 09:09:01
    赞同 展开评论 打赏

相关产品

  • 云原生数据仓库AnalyticDB MySQL版
  • 云原生数据仓库 AnalyticDB PostgreSQL版
  • 相关电子书

    更多
    云栖大会:开源 PolarDB 架构演进、关键技术与社区建设 立即下载
    2023云栖大会:和客户一起玩转PolarDB新特性 立即下载
    2023云栖大会:PolarDB for AI 立即下载