web-dev-qa-db-ja.com

ユニオンを使用したビューからの選択でのVerticaパフォーマンス

膨大な数の行(数千万)があり、テーブルごとに、そのテーブルと他のいくつかのテーブルの間でUNIONALLを選択したビューが関連付けられています。

現在、いくつかの条件(場所)を使用して、そのビューから選択を行っています。 OracleおよびSQLServerでは、selectのパフォーマンスは妥当です。 Verticaは大きなテーブルでの選択に適していると思われるため、試してみましたが、この特定の選択のパフォーマンスは非常に悪いです。

ユニオンを実行すると、列に戻ることができないため、列のインデックスが失われることを理解しています。

Verticaの問題は何だと思いますか?他のデータベースが行ういくつかの最適化手順が欠落していますか?

1
Zoltan Ersek

Verticaクエリのパフォーマンスは、クエリで使用される述語に大きく依存します。

パフォーマンスの要点を取得するには、実行しているクエリの選択した列の_projection name_を取得してみてください。プロジェクションの_order by_句の列は、selectのパフォーマンスを決定する上で非常に重要です。クエリでexplainを実行することでそれを取得できます。

Verticaは、列をsortingcompressingを介してencodingすることでパフォーマンスを向上させ、実行中に最小限のメモリを使用するようにします。

また、すべてのテーブルでanalyze_histogram(tablename, 100)を実行します。これにより、_analyze_statistics_によって取得されたデータサンプルの10%だけでなく、完全なデータサンプルの統計が保証されます。

また、unionを実行しているので、すべてのprojectionsの_sort order_をunionの後と同じに保つようにしてください。意味がない場合があります。

1
minatverma