Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-27576

Use DESC indexes for MIN/MAX optimization

Details

    Description

      As of c10e10c6, opt_sum.cc is still stubbed for DESC indexes

            if (part->key_part_flag & HA_REVERSE_SORT)
              break; // TODO MDEV-13756
      

      Given that we are about to close MDEV-13756, it looks strange: either it was forgotten and needs to be enabled, or maybe it requires a better reference.

      Given the above, the optimization expectedly doesn't work.

      --source include/have_sequence.inc
       
      create or replace table t1 (id int, key(id));
      insert into t1 select seq from seq_1_to_100 order by rand(1);
      explain extended select max(id) from t1 where id > 50;
       
      create or replace table t1 (id int, key(id desc));
      insert into t1 select seq from seq_1_to_100 order by rand(1);
      explain extended select max(id) from t1 where id > 50;
       
      # Cleanup
      drop table t1;
      

      With the ASC index, it is

      preview-10.8-MDEV-13756-desc-indexes c10e10c6

      +------+-------------+-------+------+---------------+------+---------+------+------+----------+------------------------------+
      | id   | select_type | table | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                        |
      +------+-------------+-------+------+---------------+------+---------+------+------+----------+------------------------------+
      |    1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL |     NULL | Select tables optimized away |
      +------+-------------+-------+------+---------------+------+---------+------+------+----------+------------------------------+
      

      With the DESC index, it is

      +------+-------------+-------+-------+---------------+------+---------+------+------+----------+--------------------------+
      | id   | select_type | table | type  | possible_keys | key  | key_len | ref  | rows | filtered | Extra                    |
      +------+-------------+-------+-------+---------------+------+---------+------+------+----------+--------------------------+
      |    1 | SIMPLE      | t1    | range | id            | id   | 5       | NULL | 50   |   100.00 | Using where; Using index |
      +------+-------------+-------+-------+---------------+------+---------+------+------+----------+--------------------------+
      

      Attachments

        Issue Links

          Activity

            elenst Elena Stepanova created issue -
            elenst Elena Stepanova made changes -
            Field Original Value New Value
            elenst Elena Stepanova made changes -
            Description As of c10e10c6, opt_sum.cc is still stubbed for DESC indexes
            {noformat}
                  if (part->key_part_flag & HA_REVERSE_SORT)
                    break; // TODO MDEV-13756
            {noformat}
            Given that we are about to close MDEV-13756, it looks strange: either it was forgotten and needs to be enabled, or maybe it requires a better reference.

            Given the above, the optimization expectedly doesn't work.

            {code:sql}
            --source include/have_innodb.inc
            --source include/have_sequence.inc

            create or replace table t1 (id int, key(id));
            insert into t1 select seq from seq_1_to_100 order by rand(1);
            explain extended select max(id) from t1 where id > 50;

            create or replace table t1 (id int, key(id desc));
            insert into t1 select seq from seq_1_to_100 order by rand(1);
            explain extended select max(id) from t1 where id > 50;

            # Cleanup
            drop table t1;
            {code}

            With the ASC index, it is
            {code:sql|title=preview-10.8-MDEV-13756-desc-indexes c10e10c6}
            +------+-------------+-------+------+---------------+------+---------+------+------+----------+------------------------------+
            | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
            +------+-------------+-------+------+---------------+------+---------+------+------+----------+------------------------------+
            | 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away |
            +------+-------------+-------+------+---------------+------+---------+------+------+----------+------------------------------+
            {code}
            With the DESC index, it is
            {code:sql}
            +------+-------------+-------+-------+---------------+------+---------+------+------+----------+--------------------------+
            | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
            +------+-------------+-------+-------+---------------+------+---------+------+------+----------+--------------------------+
            | 1 | SIMPLE | t1 | range | id | id | 5 | NULL | 50 | 100.00 | Using where; Using index |
            +------+-------------+-------+-------+---------------+------+---------+------+------+----------+--------------------------+
            {code}
            As of c10e10c6, opt_sum.cc is still stubbed for DESC indexes
            {noformat}
                  if (part->key_part_flag & HA_REVERSE_SORT)
                    break; // TODO MDEV-13756
            {noformat}
            Given that we are about to close MDEV-13756, it looks strange: either it was forgotten and needs to be enabled, or maybe it requires a better reference.

            Given the above, the optimization expectedly doesn't work.

            {code:sql}
            --source include/have_sequence.inc

            create or replace table t1 (id int, key(id));
            insert into t1 select seq from seq_1_to_100 order by rand(1);
            explain extended select max(id) from t1 where id > 50;

            create or replace table t1 (id int, key(id desc));
            insert into t1 select seq from seq_1_to_100 order by rand(1);
            explain extended select max(id) from t1 where id > 50;

            # Cleanup
            drop table t1;
            {code}

            With the ASC index, it is
            {code:sql|title=preview-10.8-MDEV-13756-desc-indexes c10e10c6}
            +------+-------------+-------+------+---------------+------+---------+------+------+----------+------------------------------+
            | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
            +------+-------------+-------+------+---------------+------+---------+------+------+----------+------------------------------+
            | 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away |
            +------+-------------+-------+------+---------------+------+---------+------+------+----------+------------------------------+
            {code}
            With the DESC index, it is
            {code:sql}
            +------+-------------+-------+-------+---------------+------+---------+------+------+----------+--------------------------+
            | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
            +------+-------------+-------+-------+---------------+------+---------+------+------+----------+--------------------------+
            | 1 | SIMPLE | t1 | range | id | id | 5 | NULL | 50 | 100.00 | Using where; Using index |
            +------+-------------+-------+-------+---------------+------+---------+------+------+----------+--------------------------+
            {code}
            serg Sergei Golubchik made changes -
            Assignee Sergei Golubchik [ serg ] Sergei Petrunia [ psergey ]
            elenst Elena Stepanova made changes -
            Comment [ A comment with security level 'Developers' was removed. ]
            psergei Sergei Petrunia made changes -
            Fix Version/s 10.11 [ 27614 ]
            Fix Version/s 10.8 [ 26121 ]
            serg Sergei Golubchik made changes -
            Fix Version/s 10.12 [ 28320 ]
            Fix Version/s 10.11 [ 27614 ]
            psergei Sergei Petrunia made changes -
            Labels optimizer-easy optimizer-feature
            psergei Sergei Petrunia made changes -
            Priority Critical [ 2 ] Major [ 3 ]
            ycp Yuchen Pei made changes -
            Assignee Sergei Petrunia [ psergey ] Yuchen Pei [ JIRAUSER52627 ]
            ycp Yuchen Pei made changes -
            Affects Version/s N/A [ 14700 ]
            Issue Type Bug [ 1 ] Task [ 3 ]
            ycp Yuchen Pei made changes -
            Fix Version/s 11.2 [ 28603 ]
            Fix Version/s 11.0 [ 28320 ]
            ycp Yuchen Pei made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            serg Sergei Golubchik made changes -
            Summary Use of DESC indexes is disabled for MIN/MAX optimization Use DESC indexes for MIN/MAX optimization
            ycp Yuchen Pei made changes -
            Fix Version/s 11.3 [ 28565 ]
            Fix Version/s 11.2 [ 28603 ]
            ycp Yuchen Pei made changes -
            Priority Major [ 3 ] Critical [ 2 ]
            serg Sergei Golubchik made changes -
            Fix Version/s 11.4 [ 29301 ]
            Fix Version/s 11.3 [ 28565 ]
            serg Sergei Golubchik made changes -
            Fix Version/s 11.5 [ 29506 ]
            Fix Version/s 11.4 [ 29301 ]
            ycp Yuchen Pei made changes -
            Assignee Yuchen Pei [ JIRAUSER52627 ] Sergei Petrunia [ psergey ]
            Status In Progress [ 3 ] In Review [ 10002 ]
            serg Sergei Golubchik made changes -
            Fix Version/s 11.4 [ 29301 ]
            Fix Version/s 11.5 [ 29506 ]
            psergei Sergei Petrunia made changes -
            Assignee Sergei Petrunia [ psergey ] Yuchen Pei [ JIRAUSER52627 ]
            Status In Review [ 10002 ] Stalled [ 10000 ]
            psergei Sergei Petrunia made changes -
            serg Sergei Golubchik made changes -
            Fix Version/s 11.5 [ 29506 ]
            Fix Version/s 11.4 [ 29301 ]
            ycp Yuchen Pei made changes -
            Assignee Yuchen Pei [ JIRAUSER52627 ] Sergei Petrunia [ psergey ]
            Status Stalled [ 10000 ] In Review [ 10002 ]
            psergei Sergei Petrunia made changes -
            Assignee Sergei Petrunia [ psergey ] Yuchen Pei [ JIRAUSER52627 ]
            Status In Review [ 10002 ] Stalled [ 10000 ]
            ycp Yuchen Pei made changes -
            Status Stalled [ 10000 ] In Testing [ 10301 ]
            ycp Yuchen Pei made changes -
            Assignee Yuchen Pei [ JIRAUSER52627 ] Lena Startseva [ JIRAUSER50478 ]
            psergei Sergei Petrunia made changes -
            Fix Version/s 11.4 [ 29301 ]
            Fix Version/s 11.5 [ 29506 ]
            lstartseva Lena Startseva made changes -
            Assignee Lena Startseva [ JIRAUSER50478 ] Yuchen Pei [ JIRAUSER52627 ]
            Status In Testing [ 10301 ] Stalled [ 10000 ]
            ycp Yuchen Pei made changes -
            Fix Version/s 11.4.1 [ 29523 ]
            Fix Version/s 11.4 [ 29301 ]
            Resolution Fixed [ 1 ]
            Status Stalled [ 10000 ] Closed [ 6 ]
            serg Sergei Golubchik made changes -
            serg Sergei Golubchik made changes -
            serg Sergei Golubchik made changes -
            ralf.gebhardt Ralf Gebhardt made changes -
            Labels optimizer-easy optimizer-feature Preview_11.4 optimizer-easy optimizer-feature
            rob.schwyzer@mariadb.com Rob Schwyzer (Inactive) made changes -
            rob.schwyzer@mariadb.com Rob Schwyzer (Inactive) made changes -

            People

              ycp Yuchen Pei
              elenst Elena Stepanova
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.