# [KB]关于 TiDB 的 SQL explain 与慢 SQL 记录的指纹解释出来的算子存在差异

## Issue

SQL explain 的执行计划显示的是 IndexRangeScan 算子，但是在慢日志中对 SQL 指纹进行 [tidb_decode_plan](https://docs.pingcap.com/zh/tidb/stable/tidb-functions#tidb_decode_plan) 展示的算子是 IndexScan。

## Root Cause

IndexScan 在explain 输出的时候，会根据 range 来判断，如果 IndexScan 有 range，就加上 range ，成 IndexRangeScan，没有就输出 IndexFullScan，但是在编码 SQL 指纹的时候没有复用这个逻辑导致编码后的 SQL 指纹与 explan 的这个算子有些区别。

TableScan 同样会出现类似的情况，Github Issue：[https://github.com/pingcap/tidb/issues/20833](https://github.com/pingcap/tidb/issues/20833)

 **注明：这只是显示的问题，实际执行的计划是 RangeScan，可以以执行计划 operator info 字段中的信息为准。** 

## Diagnostic Steps

查看 explain SQL 的执行计划，执行计划中显示使用的是：IndexRangeScan 算子

![know-issue-tidb-sql-digest-inconsistency.png](/images/TiDB/know-issue-tidb-sql-digest-inconsistency1.png)

查看慢日志中 SQL 指纹解释出来的执行计划，执行计划中显示使用的是：IndexScan 算子，查看 operator info 字段是 IndexRangeScan

![know-issue-tidb-sql-digest-inconsistency2](/images/TiDB/know-issue-tidb-sql-digest-inconsistency2.png)

## Resolution

v4.0.11 及以上版本已经修复这个问题。

PR：[https://github.com/pingcap/tidb/pull/21935](https://github.com/pingcap/tidb/pull/21935)

## Workaround

N/A