duckdb icon indicating copy to clipboard operation
duckdb copied to clipboard

Add estimated cardinality to logical plans

Open Tmonster opened this issue 1 year ago • 0 comments

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       │
                                                          └───────────────────────────┘

Tmonster avatar Aug 23 '24 13:08 Tmonster