Estimate Actual Operator - 5 PROJECT o_orderpriority, a1 AS order_count
- 5 SORT o_orderpriority
- 5 PROJECT o_orderpriority, a1
- 5 AGGREGATECOUNT() AS a1 GROUPBYHASH o_orderpriority
- 51276 PROJECT o_orderpriority
- 51276 PROJECT o_orderpriority
- 51276 RIGHTSEMIINNERJOINHASHON PROJECTION_94.l_orderkey = PROJECTION_91.o_orderkey
- 55935 │└PROJECT o_orderkey AS o_orderkey_right, o_orderpriority
- 55935 │PROJECT o_orderkey, o_orderpriority
- 55935 │TABLESCAN orders WHERE (o_orderdate >= '1995-02-01') AND (o_orderdate < '1995-05-01')
- 3793296 PROJECT l_orderkey
- 3793296 TABLESCAN lineitem WHERE (l_orderkey = l_orderkey) AND (l_commitdate < l_receiptdate)
Commentary
EXIST decorrelation into SEMI JOIN
This expression shoudl be decorrelated:
EXISTS (SELECT *
FROM tpch.lineitem
WHERE l_orderkey = o_orderkey
AND l_commitdate < l_receiptdate)
Optimizers will generally convert this into a SEMI JOIN.
Flipping the inner and outer side of the join (for optimisers that know how to do this) will greatly reduce the amount of memory consumed and it opens up additional opportunities for bloom filtering.