duckdb
duckdb copied to clipboard
Add estimated cardinality to logical plans
Also helps to verify a fix for https://github.com/duckdblabs/duckdb-internal/issues/2723
Before:
┌─────────────┴─────────────┐
│ COMPARISON_JOIN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ INNER ├──────────────┐
│ (o_orderkey = l_orderkey) │ │
└─────────────┬─────────────┘ │
┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│ SEQ_SCAN ││ COMPARISON_JOIN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ││ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ orders ││ INNER ├──────────────┐
│ ││ (l_suppkey = ps_suppkey) │ │
│ ││ (l_partkey = ps_partkey) │ │
└───────────────────────────┘└─────────────┬─────────────┘ │
┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│ SEQ_SCAN ││ COMPARISON_JOIN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ││ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ lineitem ││ INNER ├───────────────────────────────────────────┐
│ ││ (ps_suppkey = s_suppkey) │ │
└───────────────────────────┘└─────────────┬─────────────┘ │
┌─────────────┴─────────────┐ ┌─────────────┴─────────────┐
│ COMPARISON_JOIN │ │ COMPARISON_JOIN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ INNER ├──────────────┐ │ INNER ├──────────────┐
│ (ps_partkey = p_partkey) │ │ │(s_nationkey = n_nationkey)│ │
└─────────────┬─────────────┘ │ └─────────────┬─────────────┘ │
┌─────────────┴─────────────┐┌─────────────┴─────────────┐┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│ SEQ_SCAN ││ FILTER ││ SEQ_SCAN ││ SEQ_SCAN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ││ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ││ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ││ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ partsupp ││ contains(p_name, 'green') ││ supplier ││ nation │
└───────────────────────────┘└─────────────┬─────────────┘└───────────────────────────┘└───────────────────────────┘
┌─────────────┴─────────────┐
│ SEQ_SCAN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ part │
└───────────────────────────┘
Now:
┌─────────────┴─────────────┐
│ COMPARISON_JOIN │
│ ──────────────────── │
│ Join Type: INNER │
│ │
│ Conditions: ├──────────────┐
│ (l_suppkey = s_suppkey) │ │
│ (l_partkey = ps_partkey) │ │
│ │ │
│ ~1405460 Rows │ │
└─────────────┬─────────────┘ │
┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│ SEQ_SCAN ││ COMPARISON_JOIN │
│ ──────────────────── ││ ──────────────────── │
│ lineitem ││ Join Type: INNER │
│ ││ │
│ ││ Conditions: ├───────────────────────────────────────────┐
│ ││ (ps_suppkey = s_suppkey) │ │
│ ││ │ │
│ ~6001215 Rows ││ ~86199 Rows │ │
└───────────────────────────┘└─────────────┬─────────────┘ │
┌─────────────┴─────────────┐ ┌─────────────┴─────────────┐
│ COMPARISON_JOIN │ │ COMPARISON_JOIN │
│ ──────────────────── │ │ ──────────────────── │
│ Join Type: INNER │ │ Join Type: INNER │
│ │ │ │
│ Conditions: ├──────────────┐ │ Conditions: ├──────────────┐
│ (ps_partkey = p_partkey) │ │ │(s_nationkey = n_nationkey)│ │
│ │ │ │ │ │
│ ~86940 Rows │ │ │ ~10000 Rows │ │
└─────────────┬─────────────┘ │ └─────────────┬─────────────┘ │
┌─────────────┴─────────────┐┌─────────────┴─────────────┐┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│ SEQ_SCAN ││ FILTER ││ SEQ_SCAN ││ SEQ_SCAN │
│ ──────────────────── ││ ──────────────────── ││ ──────────────────── ││ ──────────────────── │
│ partsupp ││ Expressions: ││ supplier ││ nation │
│ ││ contains(p_name, 'green') ││ ││ │
│ ││ ││ ││ │
│ ~800000 Rows ││ ~40000 Rows ││ ~10000 Rows ││ ~25 Rows │
└───────────────────────────┘└─────────────┬─────────────┘└───────────────────────────┘└───────────────────────────┘
┌─────────────┴─────────────┐
│ SEQ_SCAN │
│ ──────────────────── │
│ part │
│ │
│ ~200000 Rows │
└───────────────────────────┘