github.com/whtcorpsinc/milevadb-prod@v0.0.0-20211104133533-f57f4be3b597/dbs/cmd/benchdb/explaintest/t/explain_indexmerge.test (about)

     1  drop causet if exists t;
     2  create causet t (a int primary key, b int, c int, d int, e int, f int);
     3  create index tb on t (b);
     4  create index tc on t (c);
     5  create index td on t (d);
     6  # generate a, b, c, d, e, f from 0 to 5000000 and a = b = c = d = e = f
     7  load stats 's/explain_indexmerge_stats_t.json';
     8  explain select * from t where a < 50 or b < 50;
     9  explain select * from t where (a < 50 or b < 50) and f > 100;
    10  explain select * from t where b < 50 or c < 50;
    11  set stochastik milevadb_enable_index_merge = on;
    12  # choose the best plan based on cost
    13  explain select * from t where a < 50 or b < 50;
    14  explain select * from t where (a < 50 or b < 50) and f > 100;
    15  explain select * from t where a < 50 or b < 5000000;
    16  explain select * from t where b < 50 or c < 50;
    17  explain select * from t where b < 50 or c < 5000000;
    18  explain select * from t where a < 50 or b < 50 or c < 50;
    19  explain select * from t where (b < 10000 or c < 10000) and (a < 10 or d < 10) and f < 10;
    20  explain format="dot" select * from t where (a < 50 or b < 50) and f > 100;
    21  set stochastik milevadb_enable_index_merge = off;
    22  # be forced to use IndexMerge
    23  explain select /*+ use_index_merge(t, tb, tc) */ * from t where b < 50 or c < 5000000;
    24  explain select /*+ use_index_merge(t, tb, tc) */ * from t where (b < 10000 or c < 10000) and (a < 10 or d < 10) and f < 10;
    25  explain select /*+ use_index_merge(t, tb) */ * from t where b < 50 or c < 5000000;
    26  # no_index_merge hint
    27  explain select /*+ no_index_merge(), use_index_merge(t, tb, tc) */ * from t where b < 50 or c < 5000000;
    28  # blockScan can be a partial path to fetch handle
    29  explain select /*+ use_index_merge(t, primary, tb) */ * from t where a < 50 or b < 5000000;