カラムの剪定
列プルーニングの基本的な考え方は、演算子で使用されない列については、最適化中にオプティマイザが保持する必要がないというものです。これらの列を削除することで、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を読み取らないため、これらはプルーニング可能です。
そのため、TiDBはロジック最適化フェーズでトップダウンスキャンを実行する際に、リソースの無駄を削減するために冗長な列をプルーニングします。このスキャン処理は「カラムの剪定」と呼ばれ、ルールcolumnPruner
に対応しています。このルールを無効にしたい場合は、 最適化ルールのブロックリストと式プッシュダウンを参照してください。