From 0a21dcded7f92804683fc270bc327e336a7a02a7 Mon Sep 17 00:00:00 2001 From: lawyerphx Date: Fri, 22 May 2020 16:42:57 +0800 Subject: [PATCH 1/3] cherry pick #3190 to release-2.1 Signed-off-by: ti-srebot --- column-pruning.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 column-pruning.md diff --git a/column-pruning.md b/column-pruning.md new file mode 100644 index 000000000000..e3db40df00e0 --- /dev/null +++ b/column-pruning.md @@ -0,0 +1,20 @@ +--- +title: 列裁剪 +category: performance +--- + +# 列裁剪 + +列裁剪的基本思想在于:对于算子中实际用不上的列,优化器在优化的过程中没有必要保留它们。 对这些列的删除会减少 I/O 资源占用,并为后续的优化带来便利。下面给出一个列重复的例子: + +假设表 t 里面有 a b c d 四列,执行如下语句: + +{{< copyable "sql" >}} + +```sql +select a from t where b > 5 +``` + +在该查询的过程中,t 表实际上只有 a, b 两列会被用到,而 c, d 的数据则显得多余。对应到该语句的查询计划,Selection 算子会用到 b 列,下面接着的 DataSource 算子会用到 a, b 两列,而剩下 c, d 两列则都可以裁剪掉,DataSource 算子在读数据时不需要将它们读进来。 + +出于上述考量,TiDB 会在逻辑优化阶段进行自上而下的扫描,裁剪不需要的列,减少资源浪费。该扫描过程称作 “列裁剪”,对应逻辑优化规则中的 `columnPruner`。如果要关闭这个规则,可以在参照[优化规则及表达式下推的黑名单](/blacklist-control-plan.md)中的关闭方法。 From 1b38c4e78d6451ecf4d4069ebe8124ce2572c209 Mon Sep 17 00:00:00 2001 From: lawyerphx Date: Mon, 22 Jun 2020 16:41:06 +0800 Subject: [PATCH 2/3] Update column-pruning.md --- column-pruning.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/column-pruning.md b/column-pruning.md index e3db40df00e0..beeca3369355 100644 --- a/column-pruning.md +++ b/column-pruning.md @@ -17,4 +17,4 @@ select a from t where b > 5 在该查询的过程中,t 表实际上只有 a, b 两列会被用到,而 c, d 的数据则显得多余。对应到该语句的查询计划,Selection 算子会用到 b 列,下面接着的 DataSource 算子会用到 a, b 两列,而剩下 c, d 两列则都可以裁剪掉,DataSource 算子在读数据时不需要将它们读进来。 -出于上述考量,TiDB 会在逻辑优化阶段进行自上而下的扫描,裁剪不需要的列,减少资源浪费。该扫描过程称作 “列裁剪”,对应逻辑优化规则中的 `columnPruner`。如果要关闭这个规则,可以在参照[优化规则及表达式下推的黑名单](/blacklist-control-plan.md)中的关闭方法。 +出于上述考量,TiDB 会在逻辑优化阶段进行自上而下的扫描,裁剪不需要的列,减少资源浪费。该扫描过程称作 “列裁剪”,对应逻辑优化规则中的 `columnPruner`。 From 7563c7265dcbb89af50a8eb93c49d3f436aef77e Mon Sep 17 00:00:00 2001 From: lawyerphx Date: Mon, 29 Jun 2020 15:33:53 +0800 Subject: [PATCH 3/3] Update TOC.md --- TOC.md | 1 + 1 file changed, 1 insertion(+) diff --git a/TOC.md b/TOC.md index 849d1661981f..e64b55144468 100644 --- a/TOC.md +++ b/TOC.md @@ -240,6 +240,7 @@ - [Optimizer Hints](/optimizer-hints.md) - [TiKV 调优](/tune-tikv-performance.md) - [TiDB 最佳实践](https://pingcap.com/blog-cn/tidb-best-practice/) + - [列裁剪](/column-pruning.md) + 监控指标 - [Overview 面板](/grafana-overview-dashboard.md) - [TiDB 面板](/grafana-tidb-dashboard.md)