[
  {
    "Name": "TestLimitCrossEstimation",
    "Cases": [
      {
        "SQL": [
          "set session tidb_opt_correlation_exp_factor = 0",
          "EXPLAIN SELECT * FROM t WHERE b = 2 ORDER BY a limit 1;"
        ],
        "Plan": [
          "TopN_8 1.00 root  test.t.a:asc, offset:0, count:1",
          "└─IndexReader_16 1.00 root  index:TopN_15",
          "  └─TopN_15 1.00 cop[tikv]  test.t.a:asc, offset:0, count:1",
          "    └─IndexRangeScan_14 10.00 cop[tikv] table:t, index:idx_bc(b, c) range:[2,2], keep order:false, stats:pseudo"
        ]
      },
      {
        "SQL": [
          "insert into t (a, b) values (1, 1),(2, 1),(3, 1),(4, 1),(5, 1),(6, 1),(7, 1),(8, 1),(9, 1),(10, 1),(11, 1),(12, 1),(13, 1),(14, 1),(15, 1),(16, 1),(17, 1),(18, 1),(19, 1),(20, 2),(21, 2),(22, 2),(23, 2),(24, 2),(25, 2)",
          "analyze table t",
          "EXPLAIN SELECT * FROM t WHERE b = 2 ORDER BY a limit 1"
        ],
        "Plan": [
          "TopN_8 1.00 root  test.t.a:asc, offset:0, count:1",
          "└─IndexReader_16 1.00 root  index:TopN_15",
          "  └─TopN_15 1.00 cop[tikv]  test.t.a:asc, offset:0, count:1",
          "    └─IndexRangeScan_14 6.00 cop[tikv] table:t, index:idx_bc(b, c) range:[2,2], keep order:false"
        ]
      },
      {
        "SQL": [
          "truncate table t",
          "insert into t (a, b) values (1, 25),(2, 24),(3, 23),(4, 23),(5, 21),(6, 20),(7, 19),(8, 18),(9, 17),(10, 16),(11, 15),(12, 14),(13, 13),(14, 12),(15, 11),(16, 10),(17, 9),(18, 8),(19, 7),(20, 6),(21, 5),(22, 4),(23, 3),(24, 2),(25, 1)",
          "analyze table t",
          "EXPLAIN SELECT * FROM t WHERE b <= 6 ORDER BY a limit 1"
        ],
        "Plan": [
          "TopN_8 1.00 root  test.t.a:asc, offset:0, count:1",
          "└─IndexReader_16 1.00 root  index:TopN_15",
          "  └─TopN_15 1.00 cop[tikv]  test.t.a:asc, offset:0, count:1",
          "    └─IndexRangeScan_14 6.00 cop[tikv] table:t, index:idx_bc(b, c) range:[-inf,6], keep order:false"
        ]
      },
      {
        "SQL": [
          "EXPLAIN SELECT *, t1.a IN (SELECT t2.b FROM t t2) FROM t t1 WHERE t1.b <= 6 ORDER BY t1.a limit 1"
        ],
        "Plan": [
          "Limit_18 1.00 root  offset:0, count:1",
          "└─IndexJoin_63 1.00 root  left outer semi join, inner:IndexReader_62, outer key:test.t.a, inner key:test.t.b, equal cond:eq(test.t.a, test.t.b)",
          "  ├─TopN_26(Build) 1.00 root  test.t.a:asc, offset:0, count:1",
          "  │ └─IndexReader_34 1.00 root  index:TopN_33",
          "  │   └─TopN_33 1.00 cop[tikv]  test.t.a:asc, offset:0, count:1",
          "  │     └─IndexRangeScan_32 6.00 cop[tikv] table:t1, index:idx_bc(b, c) range:[-inf,6], keep order:false",
          "  └─IndexReader_62(Probe) 1.04 root  index:IndexRangeScan_61",
          "    └─IndexRangeScan_61 1.04 cop[tikv] table:t2, index:idx_bc(b, c) range: decided by [eq(test.t.b, test.t.a)], keep order:false"
        ]
      },
      {
        "SQL": [
          "truncate table t",
          "insert into t (a, b) values (1, 1),(2, 1),(3, 1),(4, 1),(5, 1),(6, 1),(7, 2),(8, 2),(9, 2),(10, 2),(11, 2),(12, 2),(13, 2),(14, 2),(15, 2),(16, 2),(17, 2),(18, 2),(19, 2),(20, 2),(21, 2),(22, 2),(23, 2),(24, 2),(25, 2)",
          "analyze table t",
          "EXPLAIN SELECT * FROM t WHERE b = 1 ORDER BY a desc limit 1"
        ],
        "Plan": [
          "TopN_8 1.00 root  test.t.a:desc, offset:0, count:1",
          "└─IndexReader_16 1.00 root  index:TopN_15",
          "  └─TopN_15 1.00 cop[tikv]  test.t.a:desc, offset:0, count:1",
          "    └─IndexRangeScan_14 6.00 cop[tikv] table:t, index:idx_bc(b, c) range:[1,1], keep order:false"
        ]
      },
      {
        "SQL": [
          "truncate table t",
          "insert into t (a, b) values (1, 1),(2, 1),(3, 1),(4, 1),(5, 1),(6, 1),(7, 1),(8, 1),(9, 2),(10, 1),(11, 1),(12, 1),(13, 1),(14, 2),(15, 2),(16, 1),(17, 2),(18, 1),(19, 2),(20, 1),(21, 2),(22, 1),(23, 1),(24, 1),(25, 1)",
          "analyze table t",
          "EXPLAIN SELECT * FROM t WHERE b = 2 ORDER BY a limit 1"
        ],
        "Plan": [
          "Limit_11 1.00 root  offset:0, count:1",
          "└─TableReader_22 1.00 root  data:Limit_21",
          "  └─Limit_21 1.00 cop[tikv]  offset:0, count:1",
          "    └─Selection_20 1.00 cop[tikv]  eq(test.t.b, 2)",
          "      └─TableFullScan_19 4.17 cop[tikv] table:t keep order:true"
        ]
      },
      {
        "SQL": [
          "set session tidb_opt_correlation_exp_factor = 1",
          "EXPLAIN SELECT * FROM t WHERE b = 2 ORDER BY a limit 1"
        ],
        "Plan": [
          "TopN_8 1.00 root  test.t.a:asc, offset:0, count:1",
          "└─IndexReader_16 1.00 root  index:TopN_15",
          "  └─TopN_15 1.00 cop[tikv]  test.t.a:asc, offset:0, count:1",
          "    └─IndexRangeScan_14 6.00 cop[tikv] table:t, index:idx_bc(b, c) range:[2,2], keep order:false"
        ]
      },
      {
        "SQL": [
          "set session tidb_opt_correlation_exp_factor = 0",
          "truncate table t",
          "insert into t (a, b) values (1, 1),(2, 1),(3, 1),(4, 1),(5, 1),(6, 1),(7, 1),(8, 1),(9, 1),(10, 1),(11, 1),(12, 1),(13, 1),(14, 1),(15, 1),(16, 1),(17, 1),(18, 1),(19, 1),(20, 2),(21, 2),(22, 2),(23, 2),(24, 2),(25, 2)",
          "analyze table t",
          "EXPLAIN SELECT * FROM t WHERE b = 2 and a > 0 ORDER BY a limit 1"
        ],
        "Plan": [
          "TopN_8 1.00 root  test.t.a:asc, offset:0, count:1",
          "└─IndexReader_19 1.00 root  index:TopN_18",
          "  └─TopN_18 1.00 cop[tikv]  test.t.a:asc, offset:0, count:1",
          "    └─Selection_17 6.00 cop[tikv]  gt(test.t.a, 0)",
          "      └─IndexRangeScan_16 6.00 cop[tikv] table:t, index:idx_bc(b, c) range:[2,2], keep order:false"
        ]
      },
      {
        "SQL": [
          "drop table t",
          "create table t(a int primary key, b int, c int, d bigint default 2147483648, e bigint default 2147483648, f bigint default 2147483648, index idx(b,d,a,c))",
          "insert into t(a, b, c) values (1, 1, 1),(2, 1, 2),(3, 1, 1),(4, 1, 2),(5, 1, 1),(6, 1, 2),(7, 1, 1),(8, 1, 2),(9, 1, 1),(10, 1, 2),(11, 1, 1),(12, 1, 2),(13, 1, 1),(14, 1, 2),(15, 1, 1),(16, 1, 2),(17, 1, 1),(18, 1, 2),(19, 1, 1),(20, 2, 2),(21, 2, 1),(22, 2, 2),(23, 2, 1),(24, 2, 2),(25, 2, 1)",
          "analyze table t",
          "EXPLAIN SELECT a FROM t WHERE b = 2 and c > 0 ORDER BY a limit 1"
        ],
        "Plan": [
          "Projection_7 1.00 root  test.t.a",
          "└─TopN_8 1.00 root  test.t.a:asc, offset:0, count:1",
          "  └─IndexReader_17 1.00 root  index:TopN_16",
          "    └─TopN_16 1.00 cop[tikv]  test.t.a:asc, offset:0, count:1",
          "      └─Selection_15 6.00 cop[tikv]  gt(test.t.c, 0)",
          "        └─IndexRangeScan_14 6.00 cop[tikv] table:t, index:idx(b, d, a, c) range:[2,2], keep order:false"
        ]
      }
    ]
  },
  {
    "Name": "TestIssue9562",
    "Cases": [
      {
        "SQL": [
          "create table t1(a bigint, b bigint, c bigint)",
          "create table t2(a bigint, b bigint, c bigint, index idx(a, b, c))",
          "explain select /*+ TIDB_INLJ(t2) */ * from t1 join t2 on t2.a=t1.a and t2.b>t1.b-1 and t2.b<t1.b+1 and t2.c=t1.c"
        ],
        "Plan": [
          "IndexJoin_9 12475.01 root  inner join, inner:IndexReader_8, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a), eq(test.t1.c, test.t2.c), other cond:gt(test.t2.b, minus(test.t1.b, 1)), lt(test.t2.b, plus(test.t1.b, 1))",
          "├─TableReader_14(Build) 9980.01 root  data:Selection_13",
          "│ └─Selection_13 9980.01 cop[tikv]  not(isnull(test.t1.a)), not(isnull(test.t1.c))",
          "│   └─TableFullScan_12 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo",
          "└─IndexReader_8(Probe) 1.25 root  index:Selection_7",
          "  └─Selection_7 1.25 cop[tikv]  not(isnull(test.t2.a)), not(isnull(test.t2.c))",
          "    └─IndexRangeScan_6 1.25 cop[tikv] table:t2, index:idx(a, b, c) range: decided by [eq(test.t2.a, test.t1.a) gt(test.t2.b, minus(test.t1.b, 1)) lt(test.t2.b, plus(test.t1.b, 1))], keep order:false, stats:pseudo"
        ]
      },
      {
        "SQL": [
          "create table t(a int, b int, index idx_ab(a, b))",
          "explain select * from t t1 join t t2 where t1.b = t2.b and t2.b is null"
        ],
        "Plan": [
          "Projection_7 0.00 root  test.t.a, test.t.b, test.t.a, test.t.b",
          "└─HashJoin_9 0.00 root  inner join, equal:[eq(test.t.b, test.t.b)]",
          "  ├─TableReader_12(Build) 0.00 root  data:Selection_11",
          "  │ └─Selection_11 0.00 cop[tikv]  isnull(test.t.b), not(isnull(test.t.b))",
          "  │   └─TableFullScan_10 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo",
          "  └─TableReader_18(Probe) 9990.00 root  data:Selection_17",
          "    └─Selection_17 9990.00 cop[tikv]  not(isnull(test.t.b))",
          "      └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo"
        ]
      }
    ]
  },
  {
    "Name": "TestTiFlashCostModel",
    "Cases": [
      [
        "TableReader_7 10000.00 root  data:TableFullScan_6",
        "└─TableFullScan_6 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo"
      ],
      [
        "TableReader_5 10000.00 root  data:TableFullScan_4",
        "└─TableFullScan_4 10000.00 cop[tikv] table:t keep order:false, stats:pseudo"
      ],
      [
        "Batch_Point_Get_5 2.00 root table:t handle:[1 2], keep order:false, desc:false"
      ],
      [
        "TableReader_6 2.00 root  data:TableRangeScan_5",
        "└─TableRangeScan_5 2.00 cop[tiflash] table:t range:[1,1], [2,2], keep order:false, stats:pseudo"
      ]
    ]
  },
  {
    "Name": "TestStraightJoin",
    "Cases": [
      [
        "HashJoin_10 10000000000000000.00 root  CARTESIAN inner join",
        "├─TableReader_23(Build) 10000.00 root  data:TableFullScan_22",
        "│ └─TableFullScan_22 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo",
        "└─HashJoin_12(Probe) 1000000000000.00 root  CARTESIAN inner join",
        "  ├─TableReader_21(Build) 10000.00 root  data:TableFullScan_20",
        "  │ └─TableFullScan_20 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo",
        "  └─HashJoin_14(Probe) 100000000.00 root  CARTESIAN inner join",
        "    ├─TableReader_19(Build) 10000.00 root  data:TableFullScan_18",
        "    │ └─TableFullScan_18 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo",
        "    └─TableReader_17(Probe) 10000.00 root  data:TableFullScan_16",
        "      └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo"
      ],
      [
        "HashJoin_10 10000000000000000.00 root  CARTESIAN inner join",
        "├─TableReader_23(Build) 10000.00 root  data:TableFullScan_22",
        "│ └─TableFullScan_22 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo",
        "└─HashJoin_12(Probe) 1000000000000.00 root  CARTESIAN inner join",
        "  ├─TableReader_21(Build) 10000.00 root  data:TableFullScan_20",
        "  │ └─TableFullScan_20 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo",
        "  └─HashJoin_14(Probe) 100000000.00 root  CARTESIAN inner join",
        "    ├─TableReader_19(Build) 10000.00 root  data:TableFullScan_18",
        "    │ └─TableFullScan_18 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo",
        "    └─TableReader_17(Probe) 10000.00 root  data:TableFullScan_16",
        "      └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo"
      ],
      [
        "HashJoin_11 1248750000000.00 root  inner join, equal:[eq(test.t1.a, test.t4.a)]",
        "├─TableReader_26(Build) 9990.00 root  data:Selection_25",
        "│ └─Selection_25 9990.00 cop[tikv]  not(isnull(test.t4.a))",
        "│   └─TableFullScan_24 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo",
        "└─HashJoin_13(Probe) 999000000000.00 root  CARTESIAN inner join",
        "  ├─TableReader_23(Build) 10000.00 root  data:TableFullScan_22",
        "  │ └─TableFullScan_22 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo",
        "  └─HashJoin_16(Probe) 99900000.00 root  CARTESIAN inner join",
        "    ├─TableReader_19(Build) 9990.00 root  data:Selection_18",
        "    │ └─Selection_18 9990.00 cop[tikv]  not(isnull(test.t1.a))",
        "    │   └─TableFullScan_17 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo",
        "    └─TableReader_21(Probe) 10000.00 root  data:TableFullScan_20",
        "      └─TableFullScan_20 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo"
      ]
    ]
  },
  {
    "Name": "TestNullCount",
    "Cases": [
      [
        "TableReader_7 2.00 root  data:Selection_6",
        "└─Selection_6 2.00 cop[tikv]  isnull(test.t.a)",
        "  └─TableFullScan_5 2.00 cop[tikv] table:t keep order:false"
      ],
      [
        "IndexLookUp_7 2.00 root  ",
        "├─IndexFullScan_5(Build) 2.00 cop[tikv] table:t, index:idx(a) keep order:false",
        "└─TableRowIDScan_6(Probe) 2.00 cop[tikv] table:t keep order:false"
      ],
      [
        "TableReader_7 0.00 root  data:Selection_6",
        "└─Selection_6 0.00 cop[tikv]  eq(test.t.b, 1)",
        "  └─TableFullScan_5 2.00 cop[tikv] table:t keep order:false"
      ],
      [
        "TableReader_7 0.00 root  data:Selection_6",
        "└─Selection_6 0.00 cop[tikv]  lt(test.t.b, 1)",
        "  └─TableFullScan_5 2.00 cop[tikv] table:t keep order:false"
      ]
    ]
  },
  {
    "Name": "TestCorrelatedEstimation",
    "Cases": [
      [
        "Projection_14 10.00 root  Column#22",
        "└─Apply_16 10.00 root  CARTESIAN left outer semi join, other cond:eq(test.t.c, Column#21)",
        "  ├─TableReader_18(Build) 10.00 root  data:TableFullScan_17",
        "  │ └─TableFullScan_17 10.00 cop[tikv] table:t keep order:false",
        "  └─StreamAgg_22(Probe) 1.00 root  funcs:count(1)->Column#21",
        "    └─HashJoin_23 1.00 root  inner join, equal:[eq(test.t.a, test.t.a)]",
        "      ├─TableReader_33(Build) 1.00 root  data:Selection_32",
        "      │ └─Selection_32 1.00 cop[tikv]  eq(test.t.a, test.t.a), not(isnull(test.t.a))",
        "      │   └─TableFullScan_31 10.00 cop[tikv] table:t1 keep order:false",
        "      └─TableReader_27(Probe) 1.00 root  data:Selection_26",
        "        └─Selection_26 1.00 cop[tikv]  eq(test.t.a, test.t.a), not(isnull(test.t.a))",
        "          └─TableFullScan_25 10.00 cop[tikv] table:s keep order:false"
      ],
      [
        "Projection_9 10.00 root  Column#13",
        "└─Apply_11 10.00 root  CARTESIAN left outer join",
        "  ├─TableReader_13(Build) 10.00 root  data:TableFullScan_12",
        "  │ └─TableFullScan_12 10.00 cop[tikv] table:t keep order:false",
        "  └─MaxOneRow_16(Probe) 1.00 root  ",
        "    └─Projection_17 0.10 root  concat(cast(test.t.a, var_string(20)), ,, cast(test.t.b, var_string(20)))->Column#13",
        "      └─IndexReader_20 0.10 root  index:Selection_19",
        "        └─Selection_19 0.10 cop[tikv]  eq(test.t.a, test.t.a)",
        "          └─IndexRangeScan_18 1.00 cop[tikv] table:t1, index:idx(c, b, a) range: decided by [eq(test.t.c, test.t.c)], keep order:false"
      ]
    ]
  },
  {
    "Name": "TestLowSelIndexGreedySearch",
    "Cases": [
      {
        "SQL": "explain select max(e) from t where a='T3382' and b='ECO' and c='TOPIC' and d='23660fa1ace9455cb7f3ee831e14a342'",
        "Plan": [
          "StreamAgg_11 1.00 root  funcs:max(test.t.e)->Column#7",
          "└─TopN_14 0.00 root  test.t.e:desc, offset:0, count:1",
          "  └─IndexLookUp_46 0.00 root  ",
          "    ├─IndexRangeScan_43(Build) 0.00 cop[tikv] table:t, index:idx2(a, c) range:[\"T3382\" \"TOPIC\",\"T3382\" \"TOPIC\"], keep order:false",
          "    └─Selection_45(Probe) 0.00 cop[tikv]  eq(test.t.b, \"ECO\"), eq(test.t.d, \"23660fa1ace9455cb7f3ee831e14a342\"), not(isnull(test.t.e))",
          "      └─TableRowIDScan_44 0.00 cop[tikv] table:t keep order:false"
        ]
      }
    ]
  },
  {
    "Name": "TestEmptyTable",
    "Cases": [
      "TableReader(Table(t)->Sel([le(test.t.c1, 50)]))",
      "LeftHashJoin{TableReader(Table(t)->Sel([not(isnull(test.t.c1))]))->TableReader(Table(t1)->Sel([not(isnull(test.t1.c1))]))->HashAgg}(test.t.c1,test.t1.c1)",
      "LeftHashJoin{TableReader(Table(t)->Sel([not(isnull(test.t.c1))]))->TableReader(Table(t1)->Sel([not(isnull(test.t1.c1))]))}(test.t.c1,test.t1.c1)",
      "Dual"
    ]
  },
  {
    "Name": "TestIndexRead",
    "Cases": [
      "IndexReader(Index(t.e)[[NULL,+inf]])->HashAgg",
      "IndexReader(Index(t.e)[[-inf,10]]->StreamAgg)->StreamAgg",
      "IndexReader(Index(t.e)[[-inf,50]]->StreamAgg)->StreamAgg",
      "IndexReader(Index(t.b_c)[[NULL,+inf]]->Sel([gt(test.t.c, 1)])->HashAgg)->HashAgg",
      "IndexLookUp(Index(t.e)[[1,1]], Table(t))->HashAgg",
      "TableReader(Table(t)->Sel([gt(test.t.e, 1)])->HashAgg)->HashAgg",
      "IndexLookUp(Index(t.b)[[-inf,20]], Table(t)->HashAgg)->HashAgg",
      "TableReader(Table(t)->Sel([le(test.t.b, 30)])->StreamAgg)->StreamAgg",
      "TableReader(Table(t)->Sel([le(test.t.b, 40)])->StreamAgg)->StreamAgg",
      "TableReader(Table(t)->Sel([le(test.t.b, 50)])->StreamAgg)->StreamAgg",
      "TableReader(Table(t)->Sel([le(test.t.b, 100000000000)])->StreamAgg)->StreamAgg",
      "TableReader(Table(t)->Sel([le(test.t.b, 40)]))",
      "TableReader(Table(t)->Sel([le(test.t.b, 50)]))",
      "TableReader(Table(t)->Sel([le(test.t.b, 10000000000)]))",
      "TableReader(Table(t)->Sel([le(test.t.b, 50)]))",
      "TableReader(Table(t)->Sel([le(test.t.b, 100)])->Limit)->Limit",
      "IndexLookUp(Index(t.b)[[-inf,1]]->TopN([test.t.a],0,10), Table(t))->TopN([test.t.a],0,10)",
      "IndexLookUp(Index(t.b)[[1,1]], Table(t))",
      "IndexLookUp(Index(t.d)[[-inf,1991-09-05 00:00:00)], Table(t))",
      "IndexLookUp(Index(t.ts)[[-inf,1991-09-05 00:00:00)], Table(t))",
      "IndexLookUp(Index(t1.idx)[[3,3]], Table(t1)->Sel([eq(test.t1.b, 100000)]))->Projection->Projection->StreamAgg->Limit"
    ]
  },
  {
    "Name": "TestAnalyze",
    "Cases": [
      "Analyze{Index(a),Table(a, b)}",
      "TableReader(Table(t)->Sel([le(test.t.a, 2)]))",
      "IndexReader(Index(t.b)[[-inf,2)])",
      "TableReader(Table(t)->Sel([eq(test.t.a, 1) le(test.t.b, 2)]))",
      "TableReader(Table(t1)->Sel([le(test.t1.a, 2)]))",
      "IndexLookUp(Index(t1.a)[[1,1]], Table(t1)->Sel([le(test.t1.b, 2)]))",
      "TableReader(Table(t2)->Sel([le(test.t2.a, 2)]))",
      "Analyze{Index(a),Index(b)}",
      "PartitionUnionAll{TableReader(Table(t4)->Sel([le(test.t4.a, 2)]))->TableReader(Table(t4)->Sel([le(test.t4.a, 2)]))}",
      "PartitionUnionAll{IndexReader(Index(t4.b)[[-inf,2)])->IndexReader(Index(t4.b)[[-inf,2)])}",
      "TableReader(Table(t4)->Sel([eq(test.t4.a, 1) le(test.t4.b, 2)]))"
    ]
  },
  {
    "Name": "TestIndexEqualUnknown",
    "Cases": [
      {
        "SQL": "explain select * from t where a = 7639902",
        "Plan": [
          "IndexReader_6 6.68 root  index:IndexRangeScan_5",
          "└─IndexRangeScan_5 6.68 cop[tikv] table:t, index:PRIMARY(a, c, b) range:[7639902,7639902], keep order:false"
        ]
      },
      {
        "SQL": "explain select c, b from t where a = 7639902 order by b asc limit 6",
        "Plan": [
          "Projection_7 6.00 root  test.t.c, test.t.b",
          "└─TopN_8 6.00 root  test.t.b:asc, offset:0, count:6",
          "  └─IndexReader_16 6.00 root  index:TopN_15",
          "    └─TopN_15 6.00 cop[tikv]  test.t.b:asc, offset:0, count:6",
          "      └─IndexRangeScan_14 6.68 cop[tikv] table:t, index:PRIMARY(a, c, b) range:[7639902,7639902], keep order:false"
        ]
      }
    ]
  }
]
