mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------------------------------------+---------+----------+----------+
| Table                                     | Op      | Msg_type | Msg_text |
+-------------------------------------------+---------+----------+----------+
| join_equality_predicate_repro.lookup_dim  | analyze | status   | OK       |
| join_equality_predicate_repro.fact_rows   | analyze | status   | OK       |
| join_equality_predicate_repro.fanout_rows | analyze | status   | OK       |
+-------------------------------------------+---------+----------+----------+
+-------------+
| section     |
+-------------+
| Environment |
+-------------+
+---------------+-----------------------+
| mysql_version | optimizer_prune_level |
+---------------+-----------------------+
| 9.7.1         |                     0 |
+---------------+-----------------------+
+---------------------+
| section             |
+---------------------+
| Table cardinalities |
+---------------------+
+-------------+-----------+
| table_name  | row_count |
+-------------+-----------+
| lookup_dim  |       271 |
| fact_rows   |      1874 |
| fanout_rows |      1019 |
+-------------+-----------+
+-------------------+
| section           |
+-------------------+
| Correctness check |
+-------------------+
+-------------------------+-----------+--------------+
| scenario                | row_count | checksum_sum |
+-------------------------+-----------+--------------+
| Q1_original             |       203 | 232707900817 |
| Q2_equivalent_predicate |       203 | 232707900817 |
| Q3_redundant_predicate  |       203 | 232707900817 |
+-------------------------+-----------+--------------+
+--------------------------------+
| section                        |
+--------------------------------+
| Q1 original predicate: EXPLAIN |
+--------------------------------+
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=32306 rows=59675)
    -> Nested loop inner join  (cost=11420 rows=59675)
        -> Filter: (d.group_key is not null)  (cost=103 rows=1019)
            -> Covering index scan on d using idx_fanout_group_key  (cost=103 rows=1019)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key is not null))  (cost=5.26 rows=58.6)
            -> Index lookup on f using idx_fact_group_key (group_key = d.group_key)  (cost=5.26 rows=58.6)
    -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1)
 |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+----------------------------------+
| section                          |
+----------------------------------+
| Q2 equivalent predicate: EXPLAIN |
+----------------------------------+
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=13672 rows=127294)
    -> Nested loop inner join  (cost=408 rows=625)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key is not null) and (f.group_key is not null))  (cost=189 rows=625)
            -> Table scan on f  (cost=189 rows=1874)
        -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1)
    -> Covering index lookup on d using idx_fanout_group_key (group_key = f.group_key)  (cost=0.889 rows=204)
 |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------------------------------+
| section                         |
+---------------------------------+
| Q3 redundant predicate: EXPLAIN |
+---------------------------------+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=13672 rows=127294)
    -> Nested loop inner join  (cost=408 rows=625)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key <= 1865571077) and (f.lookup_key is not null) and (f.group_key is not null))  (cost=189 rows=625)
            -> Table scan on f  (cost=189 rows=1874)
        -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1)
    -> Covering index lookup on d using idx_fanout_group_key (group_key = f.group_key)  (cost=0.889 rows=204)
 |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------------------+
| section             |
+---------------------+
| Q1 original / run 1 |
+---------------------+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=32306 rows=59675) (actual time=408..464 rows=203 loops=1)
    -> Nested loop inner join  (cost=11420 rows=59675) (actual time=0.388..287 rows=189197 loops=1)
        -> Filter: (d.group_key is not null)  (cost=103 rows=1019) (actual time=0.00963..0.579 rows=1019 loops=1)
            -> Covering index scan on d using idx_fanout_group_key  (cost=103 rows=1019) (actual time=0.00846..0.489 rows=1019 loops=1)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key is not null))  (cost=5.26 rows=58.6) (actual time=0.002..0.27 rows=186 loops=1019)
            -> Index lookup on f using idx_fact_group_key (group_key = d.group_key)  (cost=5.26 rows=58.6) (actual time=0.0018..0.249 rows=186 loops=1019)
    -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1) (actual time=806e-6..806e-6 rows=0.00107 loops=189197)
 |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------------------------------+
| section                         |
+---------------------------------+
| Q2 equivalent predicate / run 1 |
+---------------------------------+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=13672 rows=127294) (actual time=1.29..3.11 rows=203 loops=1)
    -> Nested loop inner join  (cost=408 rows=625) (actual time=0.871..2.99 rows=2 loops=1)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key is not null) and (f.group_key is not null))  (cost=189 rows=625) (actual time=0.0409..1.17 rows=1874 loops=1)
            -> Table scan on f  (cost=189 rows=1874) (actual time=0.0333..0.957 rows=1874 loops=1)
        -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1) (actual time=875e-6..876e-6 rows=0.00107 loops=1874)
    -> Covering index lookup on d using idx_fanout_group_key (group_key = f.group_key)  (cost=0.889 rows=204) (actual time=0.00507..0.049 rows=102 loops=2)
 |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+--------------------------------+
| section                        |
+--------------------------------+
| Q3 redundant predicate / run 1 |
+--------------------------------+
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=13672 rows=127294) (actual time=1.04..2.98 rows=203 loops=1)
    -> Nested loop inner join  (cost=408 rows=625) (actual time=0.602..2.87 rows=2 loops=1)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key <= 1865571077) and (f.lookup_key is not null) and (f.group_key is not null))  (cost=189 rows=625) (actual time=0.00803..1.15 rows=1874 loops=1)
            -> Table scan on f  (cost=189 rows=1874) (actual time=0.00669..0.903 rows=1874 loops=1)
        -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1) (actual time=825e-6..826e-6 rows=0.00107 loops=1874)
    -> Covering index lookup on d using idx_fanout_group_key (group_key = f.group_key)  (cost=0.889 rows=204) (actual time=0.0033..0.0447 rows=102 loops=2)
 |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------------------+
| section             |
+---------------------+
| Q1 original / run 2 |
+---------------------+
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=32306 rows=59675) (actual time=404..461 rows=203 loops=1)
    -> Nested loop inner join  (cost=11420 rows=59675) (actual time=0.37..285 rows=189197 loops=1)
        -> Filter: (d.group_key is not null)  (cost=103 rows=1019) (actual time=0.00768..0.56 rows=1019 loops=1)
            -> Covering index scan on d using idx_fanout_group_key  (cost=103 rows=1019) (actual time=0.00704..0.473 rows=1019 loops=1)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key is not null))  (cost=5.26 rows=58.6) (actual time=0.00198..0.268 rows=186 loops=1019)
            -> Index lookup on f using idx_fact_group_key (group_key = d.group_key)  (cost=5.26 rows=58.6) (actual time=0.00178..0.249 rows=186 loops=1019)
    -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1) (actual time=807e-6..807e-6 rows=0.00107 loops=189197)
 |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------------------------------+
| section                         |
+---------------------------------+
| Q2 equivalent predicate / run 2 |
+---------------------------------+
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=13672 rows=127294) (actual time=0.995..2.8 rows=203 loops=1)
    -> Nested loop inner join  (cost=408 rows=625) (actual time=0.563..2.7 rows=2 loops=1)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key is not null) and (f.group_key is not null))  (cost=189 rows=625) (actual time=0.0101..1.05 rows=1874 loops=1)
            -> Table scan on f  (cost=189 rows=1874) (actual time=0.00831..0.861 rows=1874 loops=1)
        -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1) (actual time=787e-6..788e-6 rows=0.00107 loops=1874)
    -> Covering index lookup on d using idx_fanout_group_key (group_key = f.group_key)  (cost=0.889 rows=204) (actual time=0.00313..0.0461 rows=102 loops=2)
 |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+--------------------------------+
| section                        |
+--------------------------------+
| Q3 redundant predicate / run 2 |
+--------------------------------+
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=13672 rows=127294) (actual time=1.06..3.16 rows=203 loops=1)
    -> Nested loop inner join  (cost=408 rows=625) (actual time=0.613..3.02 rows=2 loops=1)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key <= 1865571077) and (f.lookup_key is not null) and (f.group_key is not null))  (cost=189 rows=625) (actual time=0.0103..1.21 rows=1874 loops=1)
            -> Table scan on f  (cost=189 rows=1874) (actual time=0.00837..0.938 rows=1874 loops=1)
        -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1) (actual time=867e-6..868e-6 rows=0.00107 loops=1874)
    -> Covering index lookup on d using idx_fanout_group_key (group_key = f.group_key)  (cost=0.889 rows=204) (actual time=0.00701..0.0629 rows=102 loops=2)
 |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------------------+
| section             |
+---------------------+
| Q1 original / run 3 |
+---------------------+
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=32306 rows=59675) (actual time=413..471 rows=203 loops=1)
    -> Nested loop inner join  (cost=11420 rows=59675) (actual time=0.386..290 rows=189197 loops=1)
        -> Filter: (d.group_key is not null)  (cost=103 rows=1019) (actual time=0.0078..0.59 rows=1019 loops=1)
            -> Covering index scan on d using idx_fanout_group_key  (cost=103 rows=1019) (actual time=0.00694..0.493 rows=1019 loops=1)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key is not null))  (cost=5.26 rows=58.6) (actual time=0.00204..0.273 rows=186 loops=1019)
            -> Index lookup on f using idx_fact_group_key (group_key = d.group_key)  (cost=5.26 rows=58.6) (actual time=0.00183..0.253 rows=186 loops=1019)
    -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1) (actual time=826e-6..826e-6 rows=0.00107 loops=189197)
 |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------------------------------+
| section                         |
+---------------------------------+
| Q2 equivalent predicate / run 3 |
+---------------------------------+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=13672 rows=127294) (actual time=1.81..5.05 rows=203 loops=1)
    -> Nested loop inner join  (cost=408 rows=625) (actual time=1.04..4.88 rows=2 loops=1)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key is not null) and (f.group_key is not null))  (cost=189 rows=625) (actual time=0.013..1.87 rows=1874 loops=1)
            -> Table scan on f  (cost=189 rows=1874) (actual time=0.00995..1.52 rows=1874 loops=1)
        -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1) (actual time=0.00147..0.00147 rows=0.00107 loops=1874)
    -> Covering index lookup on d using idx_fanout_group_key (group_key = f.group_key)  (cost=0.889 rows=204) (actual time=0.00532..0.077 rows=102 loops=2)
 |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+--------------------------------+
| section                        |
+--------------------------------+
| Q3 redundant predicate / run 3 |
+--------------------------------+
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Nested loop inner join  (cost=13672 rows=127294) (actual time=1.83..5.2 rows=203 loops=1)
    -> Nested loop inner join  (cost=408 rows=625) (actual time=1.02..5.03 rows=2 loops=1)
        -> Filter: ((f.lookup_key <= 1865571077) and (f.lookup_key <= 1865571077) and (f.lookup_key is not null) and (f.group_key is not null))  (cost=189 rows=625) (actual time=0.0132..1.96 rows=1874 loops=1)
            -> Table scan on f  (cost=189 rows=1874) (actual time=0.0113..1.54 rows=1874 loops=1)
        -> Index lookup on l using idx_lookup_join_key (join_key = f.lookup_key)  (cost=0.25 rows=1) (actual time=0.0015..0.0015 rows=0.00107 loops=1874)
    -> Covering index lookup on d using idx_fanout_group_key (group_key = f.group_key)  (cost=0.889 rows=204) (actual time=0.00505..0.0766 rows=102 loops=2)
 |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+--------------------------+
| section                  |
+--------------------------+
| Three-run timing summary |
+--------------------------+
+-------------------------+---------+---------+---------+-----------+
| scenario                | run1_ms | run2_ms | run3_ms | median_ms |
+-------------------------+---------+---------+---------+-----------+
| Q1_original             | 464.806 | 462.017 | 471.860 |   464.806 |
| Q2_equivalent_predicate |   3.890 |   3.332 |   5.741 |     3.890 |
| Q3_redundant_predicate  |   3.546 |   3.731 |   5.916 |     3.731 |
+-------------------------+---------+---------+---------+-----------+
+-------------------------------+
| section                       |
+-------------------------------+
| Median speedup relative to Q1 |
+-------------------------------+
+-------------------------+-----------------+
| scenario                | speedup_over_q1 |
+-------------------------+-----------------+
| Q2_equivalent_predicate |         119.487 |
| Q3_redundant_predicate  |         124.579 |
+-------------------------+-----------------+
