用 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 到正无穷这个范围的数据。