簡體   English   中英

優化加入GreenPlum

[英]Optimize Join GreenPlum

我的表 A 有 2000 萬條記錄。 表 B 有 200,000 條記錄。 我想做一個像:

select *
from tableA a 
left join tableB b
on ((a.name1 = b.name1 OR a.name1 = b.name2) OR a.id = b.id)
and a.time > b.time
;

這是非常耗時的。 我正在使用 GreenPlum,所以我無法使用索引。 我怎樣才能優化這個? 表 B 中的行數是遞增的,並且會增加。

Greenplum 確實支持索引。 但是,這個查詢很棘手,因為您的分布列是什么並不重要,由於以下原因,無法共同定位連接。

  1. a.time 或 b.time 不適合分發,因為它是“>”運算符
  2. 您可以通過 (name1, id) 和 tableB 通過 (name1, name2, id) 分發 tableA。 但是要查看 a.time > b.time 是否滿足,您仍然需要查看所有元組。

我不確定該查詢是否對 MPP 非常友好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM