用 EXPLAIN 查看开启 IndexMerge 的 SQL 执行计划

    是 TiDB v4.0 中引入的一种对表的新访问方式。在这种访问方式下,TiDB 优化器可以选择对一张表使用多个索引,并将每个索引的返回结果进行合并。在某些场景下,这种访问方式能够减少大量不必要的数据扫描,提升查询的执行效率。

    例如,在上述示例中,过滤条件是使用 OR 条件连接的 WHERE 子句。在启用 IndexMerge 前,每个表只能使用一个索引,不能将 a = 1 下推到索引 a,也不能将 b = 1 下推到索引 b。当 t 中存在大量数据时,全表扫描的效率会很低。针对这类场景,TiDB 引入了对表的新访问方式 IndexMerge

    其中对于 IndexRangeScan/TableRangeScan 一类按范围进行的扫表操作, 表中 operator info 列相比于其他扫表操作,多了被扫描数据的范围这一信息。比如上面的例子中,IndexRangeScan_13 算子中的 range:(1,+inf] 这一信息表示该算子扫描了从 1 到正无穷这个范围的数据。