t1
(これは約10億行、ファクトテーブル)とt2
(空のテーブル、0行)の3つのテーブルを持っています。およびt0
(ディメンション表)では、すべてが統計を適切に収集しています。Teradataオプティマイザは行番号を間違って推定してから、ユニオンでテーブルにアクセスします
REPLACE VIEW v0
AS SELECT * from t1
union
SELECT * from t2;
はのこれら3つのクエリに見てみましょう::
1) Select * from t1 inner t0 join on t1.id = t0.id; -- Optimizer correctly estimates 1 bln rows
2) Select * from t2 inner t0 join on t1.id = t0.id; -- Optimizer correctly estimates 0 row
3) Select * from v0 inner t0 join on v0.id = t0.id; -- Optimizer locks t1 and t2 for read, the correctly estimated, that it will get 1 bln rows from t1, but for no clear reasons estimated same number 1 bln from table t2.
はここで何が起こっているほかビューv0
ありますか?それはバグか機能ですか?
PS。ここに表示するにはかなり大きいオリジナルクエリは35分で終了しませんでした。ちょうどt1
を残した後 - 15分で正常に終了しました。
TDリリース:15.10.03.07
TDバージョン:15.10.03.09
あなたはオプティマイザが0行 –
に@DuduMarkovitz 0または1 JOIN構文をすることを意識しない - そのない大きな違い –
を見積もることはありません完全に間違っ – Rocketq