カラムの剪定
列プルーニングの基本的な考え方は、演算子で使用されない列については、オプティマイザーが最適化中にそれらを保持する必要がないということです。これらの列を削除すると、I/O リソースの使用量が減り、その後の最適化が容易になります。以下は列の繰り返しの例です。
テーブル t に 4 つの列 (a、b、c、および d) があるとします。次のステートメントを実行できます。
select a from t where b> 5
このクエリでは、列 a と列 b のみが使用され、列 c と列 d は冗長です。このステートメントのクエリ プランに関して、 Selection
演算子は列 b を使用します。次に、 DataSource
演算子は列 a と列 b を使用します。列 c と列 d は、 DataSource
演算子が読み取らないため、プルーニングできます。
したがって、TiDB がロジック最適化フェーズ中にトップダウン スキャンを実行すると、リソースの無駄を削減するために冗長な列が削除されます。このスキャン プロセスは「カラムの剪定」と呼ばれ、 columnPruner
ルールに対応します。このルールを無効にする場合は、 最適化ルールと式プッシュダウンのブロックリストを参照してください。