开发者社区 > PolarDB开源 > PolarDB 分布式版 > 正文

在PolarDB中,为什么 a表实际上一条joint条件都不符合,但rows却是全表行数?

在PolarDB中请教一个索引问题,为什么 a表实际上一条joint条件都不符合,但rows却是全表行数?explain
select /+join_prefix(a) /
a.billid
FROM erp_bill_index a
left JOIN erp_bill_index_ext AS ebie
ON a.billid=ebie.sourcebillid and ebie.profileid=200005518 and ebie.sourcebillid>0 -- 待确认的预收款单
where a.profileid=200005518 AND a.billdate >= '2023-05-25' AND a.billdate < '2024-01-03' ;
5b10f3b77239b81afcdf5408fbe0cee2.png

展开
收起
花开富贵111 2024-01-08 15:27:15 60 0
3 条回答
写回答
取消 提交回答
  • 在PolarDB中,如果一条join条件都不符合,但rows却是全表行数,可能是因为查询条件过于宽松,导致所有行都被匹配到了。在这种情况下,可以使用EXPLAIN命令来查看查询的执行计划,以确定是否存在性能问题。

    根据您提供的查询语句,可以添加EXPLAIN关键字来查看执行计划:

    EXPLAIN
    SELECT /+join_prefix(a) /
    a.billid
    FROM erp_bill_index a
    LEFT JOIN erp_bill_index_ext AS ebie
    ON a.billid=ebie.sourcebillid and ebie.profileid=200005518 and ebie.sourcebillid>0 -- 待确认的预收款单
    WHERE a.profileid=200005518 AND a.billdate >= '2023-05-25' AND a.billdate < '2024-01-03';
    

    通过查看执行计划,可以分析查询的性能瓶颈,并针对性地进行优化。

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

    在PolarDB中,如果一条join条件都不满足,那么rows会显示为全表行数。这是因为在执行join操作时,系统会先根据join条件进行筛选,然后再进行行估算和连接操作。如果没有任何一条join条件满足,那么系统无法进行有效的行估算,因此会返回全表的行数。

    在你提供的查询中,a表实际上没有与ebie表进行任何join操作,因为所有的join条件都不满足。因此,rows会显示为全表行数。

    2024-01-08 20:44:38
    赞同 展开评论 打赏
  • 您这个条件 ebie.profileid=200005518 and ebie.sourcebillid>0 为什么不放在 WHERE后面呢?放在ON 中会把 ebie.profileid 和 ebie.sourcebillid 为NULL 的数据也返回。此回答整理来自钉群“PolarDB 专家面对面 - 慢SQL索引选择优化器新特性”

    2024-01-08 16:37:51
    赞同 展开评论 打赏

PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,100%兼容MySQL。 2021年开源,开源历程及更多信息访问:OpenPolarDB.com/about

相关电子书

更多
PolarDB+AnalyticDB助力交通物流行业系统升级 立即下载
PolarDB NL2SQL: 帮助您写出准确、优化的SQL 立即下载
云栖大会:开源 PolarDB 架构演进、关键技术与社区建设 立即下载