在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' ;
在PolarDB中,为什么 a表实际上一条joint条件都不符合,但rows却是全表行数?-[阿里云_云淘科技]

以下为热心网友提供的参考意见

在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';

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

以下为热心网友提供的参考意见

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

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

以下为热心网友提供的参考意见

您这个条件 ebie.profileid=200005518 and ebie.sourcebillid>0 为什么不放在 WHERE后面呢?放在ON 中会把 ebie.profileid 和 ebie.sourcebillid 为NULL 的数据也返回。此回答整理来自钉群“PolarDB 专家面对面 – 慢SQL索引选择优化器新特性”

本文来自投稿,不代表新手站长_郑州云淘科技有限公司立场,如若转载,请注明出处:https://www.cnzhanzhang.com/22231.html

(0)
匿名
上一篇 2024年1月8日
下一篇 2024年1月8日

相关推荐

新手站长从“心”出发,感谢16年您始终不离不弃。