膨大な数の行(数千万)があり、テーブルごとに、そのテーブルと他のいくつかのテーブルの間でUNIONALLを選択したビューが関連付けられています。
現在、いくつかの条件(場所)を使用して、そのビューから選択を行っています。 OracleおよびSQLServerでは、selectのパフォーマンスは妥当です。 Verticaは大きなテーブルでの選択に適していると思われるため、試してみましたが、この特定の選択のパフォーマンスは非常に悪いです。
ユニオンを実行すると、列に戻ることができないため、列のインデックスが失われることを理解しています。
Verticaの問題は何だと思いますか?他のデータベースが行ういくつかの最適化手順が欠落していますか?
Verticaクエリのパフォーマンスは、クエリで使用される述語に大きく依存します。
パフォーマンスの要点を取得するには、実行しているクエリの選択した列の_projection name
_を取得してみてください。プロジェクションの_order by
_句の列は、select
のパフォーマンスを決定する上で非常に重要です。クエリでexplain
を実行することでそれを取得できます。
Verticaは、列をsorting
、compressing
を介してencoding
することでパフォーマンスを向上させ、実行中に最小限のメモリを使用するようにします。
また、すべてのテーブルでanalyze_histogram(tablename, 100)
を実行します。これにより、_analyze_statistics
_によって取得されたデータサンプルの10%だけでなく、完全なデータサンプルの統計が保証されます。
また、union
を実行しているので、すべてのprojections
の_sort order
_をunion
の後と同じに保つようにしてください。意味がない場合があります。