• Igor Babaev's avatar
    MDEV-25714 Join using derived with aggregation returns incorrect results · 0b797130
    Igor Babaev authored
    If a join query uses a derived table (view / CTE) with GROUP BY clause then
    the execution plan for such join may employ split optimization. When this
    optimization is employed the derived table is not materialized. Rather only
    some partitions of the derived table are subject to grouping. Split
    optimization can be applied only if:
    - there are some indexes over the tables used in the join specifying the
      derived table whose prefixes partially cover the field items used in the
      GROUP BY list (such indexes are called splitting indexes)
    - the WHERE condition of the join query contains conjunctive equalities
      between columns of the derived table that comprise major parts of
      splitting indexes and columns of the other join tables.
    
    When the optimizer evaluates extending of a partial join by the rows of the
    derived table it always considers a possibility of using split optimization.
    Different splitting indexes can be used depending on the extended partial
    join. At some rare conditions, for example, when there is a non-splitting
    covering index for a table joined in the join specifying the derived table
    usage of a splitting index to produce rows needed for grouping may be still
    less beneficial than usage of such covering index without any splitting
    technique. The function JOIN_TAB::choose_best_splitting() must take this
    into account.
    
    Approved by Oleksandr Byelkin <sanja@mariadb.com>
    0b797130
derived_split_innodb.test 4.57 KB