カラムの剪定
列プルーニングの基本的な考え方は、オペレーターで使用されていない列の場合、オプティマイザーは最適化中にそれらを保持する必要がないということです。これらの列を削除すると、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
のルールに対応します。このルールを無効にする場合は、 最適化ルールと式のプッシュダウンのブロックリストを参照してください。