一. PingCAP官网执行算子的解释。
1.TableFullScan:全表扫描.
2.TableRangeScan:带有范围的表数据扫描.
3.TableRowIDScan:根据上层传递下来的 RowID 扫描表数据。时常在索引读操作后检索符合条件的行。
4.IndexFullScan:另一种“全表扫描”,扫的是索引数据,不是表数据。
5.IndexRangeScan:带有范围的索引数据扫描操作。
TiDB 会汇聚 TiKV/TiFlash 上扫描的数据或者计算结果,这种“数据汇聚”算子目前有如下几类:
1.TableReader:将 TiKV 上底层扫表算子 TableFullScan 或 TableRangeScan 得到的数据进行汇总。
2.IndexReader:将 TiKV 上底层扫表算子 IndexFullScan 或 IndexRangeScan 得到的数据进行汇总。
3.IndexLookUp:先汇总 Build 端 TiKV 扫描上来的 RowID,再去 Probe 端上根据这些RowID精确地读取 TiKV 上的数据。Build 端是IndexFullScan或IndexRangeScan类型的算子,Probe 端是TableRowIDScan类型的算子。
4.IndexMerge:和IndexLookupReader类似,可以看做是它的扩展,可以同时读取多个索引的数据,有多个 Build 端,一个 Probe 端。执行过程也很类似,先汇总所有 Build 端 TiKV 扫描上来的 RowID,再去 Probe 端上根据这些 RowID 精确地读取 TiKV 上的数据。Build 端是IndexFullScan或IndexRangeScan类型的算子,Probe 端是TableRowIDScan类型的算子。
二. task解释。
Cop task 是指使用 TiKV 中的 Coprocessor 执行的计算任务,root task 是指在 TiDB 中执行的计算任务。
三. operator info结果。
1. range: [1,1]表示查询的WHERE字句 (a = 1) 被下推到了 TiKV,对应的 task 为cop[tikv]。
2.keep order:false表示该查询的语义不需要 TiKV 按顺序返回结果。如果查询指定了排序(例如SELECT * FROM t WHERE a = 1 ORDER BY id),该字段的返回结果为keep order:true。
3.stats:pseudo表示estRows显示的预估数可能不准确。TiDB 定期在后台更新统计信息。也可以通过执行ANALYZE TABLE t来手动更新统计信息。
四. Explain analyze
Explain analyze是展示实际数的结果。结果可能有误差
先执行ANALYZE TABLE再执行EXPLAIN ANALYZE,预估数与实际数会更接近