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