Teradata Optimizerは、SQLのように等しいと同様です
質問
現在、バックエンドがテラダタであるBOBJレポートを最適化しようとしています。 Teradata Optimizer とても気味が悪いようで、誰かが思いついたのではないかと思っていました 解決策または回避策 オプティマイザーを取得します 同様の点でいいね!を扱います.
My issue is that we allow the user to input one of two methods:
1. Enter the Number:
or
2. Enter a Number like:
オプション1は夢のように機能し、オプション2でクエリの時間を6秒から2分間ドラッグします。
それに加えて; Teradata OptimizerのSQLステートメントの最適化について、良い記事、議論、Vidoesなどを知っている人はいますか?
解決
列はvarcharとして定義されており、同様の演算子を使用しているため、単一のアンプアクセスにPIを使用する可能性がなくなります。主なインデックスの最初のジョブは、システム内のAMP全体にデータを配布することです。 PIに対して同様の演算子を使用しているため、オプティマイザーは「すべてのアンプ」操作を実行して、同様の演算子を満たす必要があります。
WHERE MyPIColumn LIKE '123%'
123缶で始まる値のハッシュは、複数のアンプで終わります。
WHERE MyPIColum = '123'
123のハッシュは、すべてのレコードを同じアンプに配置します。 「123」のクエリは常に単一のアンプ操作です。
これに関する統計は、行の見積もりに役立つ可能性がありますが、「すべてのアンプ」操作を排除しない可能性があります。
- これはユニークなPIですか、それとも非ユニークPIですか?
- データ型が数値上で文字に選ばれたのはなぜですか?ただし、GT(E)またはLT(E)は、同じ「全面的な」操作につながる可能性があります。
- このPIは、AMPローカル結合戦略を促進するためにモデル内の他のテーブルによって共有されていますか?
他のヒント
数字が索引付けされていると思いますか? Teradataはインデックスにハッシュを使用するため、等しい場合、インデックスが使用されますが、完全なテーブルスキャンになります。
あなたが同様を使用するための本物のニーズがあるなら、あなたができることはあまりありません。試してみることができることの1つは、使用することです Substr(Number, 1, 3) = '123'
それよりも Number LIKE '123%'
. 。私は過去にこれから小さなパフォーマンスの改善を得ましたが、壮大なものは何も期待していません。
fulltextインデックス /トークン化されたインデックス、例えばLucene、および2つの解析検索が必要です。
たとえば、データベースに「12345」を挿入する場合、「1」、「12」、「123」、「234」などからリンクを作成します。
次に、「123 **」のようなものを使用するとき、ルックアップテーブルから「123」を見つけ、「12345」を求めてシークを見つけます。
あなたが直接VARCHAR比較をしている場合、つまり
Column LIKE 'VALUE'
その後、その列でNUSIを使用しようとすることができます。テーブルの主要なインデックスとインデックスの統計を収集するようにしてください