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