在PolarDB中,join 的时候对右表行的估算。
问题一:ebie.sourcebillid>0 这种非关联条件是不起作用的吗?
问题二:就是实际左表中的关联字段在右表中都没有也不会估算,只是按右表的数据分布来估算吗?
在PolarDB中,对于join操作,系统会采用拉取内表(通常是数据量较小的一边)的全部数据,缓存到内存中。接着遍历外表数据,针对外表中的每一行数据,和内表做比较,构造结果行,检查是否满足JOIN条件,如果满足条件则输出。此外,如果左表的JOIN Key较小,则消费左表的下一条数据。如果右表的JOIN Key较小,则消费右表的下一条数据。如果左右表JOIN Key相等,说明获得了1条或多条匹配,检查是否满足JOIN条件并输出。
对于非关联条件的处理,例如 "ebie.sourcebillid>0" 这样的条件,它肯定是起作用的。在执行join操作时,系统会首先通过这类条件对右表进行筛选,缩小处理范围后,再与左表进行join操作。
至于右表中关联字段在左表中没有也不会估算的问题。当使用LEFT JOIN(左连接)时,系统会返回左表中的所有记录,以及右表中与左表记录相关的匹配记录。即使在右表中不存在对应的关联字段,也不会影响查询的结果。因此,即使右表中的关联字段在左表中没有,也不会影响join操作的执行。