我正在尝试调整导致过多临时空间问题的查询。我注意到对于查询的特定部分:
Select group_id,
item,
max(greatest(height,width,length)) length,
max(greatest(least(height,length),least(height,width),least(width,length))) width,
Max(least(length,width,height) height
From items
where group_id = 1
group by group_id, item
行,字节列从961M,27G到680M,43G。
PX SEND HASH :TQ20044 680M 43G HASH
VIEW 680M 43G
HASH GROUP BY 680M 19G
PX RECEIVE 961M 27G
PX SEND HASH :TQ20042 961M 27G HASH
PX BLOCK ITERATOR 961M 27G
TABLE ACCESS FULL item_table 961M 27G
为什么选择最大值会导致Bytes列的大小几乎翻倍。有什么方法可以改变这个以至于不使用这么多吗?
---- ----更新
在查看表格后,item_table
的主键为<group_id, item>
,并且在group_id
上也有一个分区列。删除不必要的group by和聚合函数会降低读取的字节数,但我仍然不明白为什么Bytes列在group_id = 1
的初始过滤器之后上升而不是向下。