OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

スーパープロジェクション最適化時にクエリを指定する効果と注意事項

公開日:
更新日:
基本操作
#プロジェクション
#最適化
#DatabaseDesigner

はじめに

本記事では、スーパープロジェクションを最適化する際、データベースデザイナーに与えるクエリの記述ポイントを紹介します。
スーパープロジェクションの最適化については、以下の記事をご参照ください。

<スーパープロジェクションの最適化>
https://www.ashisuto.co.jp/cm/analytics-database/designed_super-projections.html

データベースデザイナーにクエリを与えるメリット

最適化時、データベースデザイナーにクエリを与えることにより、格納されているデータの特性とクエリの特性の両方を考慮した最適化が行われます。
クエリを与える/与えない場合の最適化結果イメージは以下のとおりです。

<最適前のデータ>
最適化前は以下のようにスーパープロジェクションにデータが格納されています。

<クエリを与えずに最適化した場合>
格納されているデータのカーディナリティに基づいて、スーパープロジェクションのデータがソートされます。
本例ではエリアと店舗のカーディナリティが低いため、優先してソートされています。

<クエリを与えて最適化した場合>
クエリで使用しているWHERE句の項目と、データのカーディナリティを考慮して、スーパープロジェクションのデータがソートされます。
本例では「SELECT COUNT(*) FROM table1 WHERE 日付=’0701’」をクエリとして与えているため日付が最優先でソートされ、その次にエリアと店舗がソートされています。
上述の「クエリを与えずに最適化した場合」と比べて圧縮効率は下がっていますが、上記クエリがシステムでよく使用されるクエリだとすると、本例の方が多くの処理で高い性能を発揮できます。

クエリの記述ポイント

データベースデザイナーに与えるクエリの記述内容について、ポイントを以下にまとめています。

  • システムでよく使うクエリを与える

  • 複数のクエリを同時に与えることが可能

  • WHERE句のリテラル値は最適化の結果に影響しない(任意の値で可)

  • 結合処理を含むクエリもそのまま使用可能(各テーブルのプロジェクションを最適化する)

  • ビューに対するクエリもそのまま使用可能(自動的にビューの中身のクエリを読み込む)

なお、クエリスペシフィックプロジェクションを作成する場合は、上記に加えてシステムで使うDELETE文(UPDATE文とMERGE文を含む)も与えることを推奨しています。

  • DELETE文(UPDATE文とMERGE文を含む)も同時に与える

上記により、DELETE文の処理時間が必要以上に長くなってしまうことを防止できます。
詳細は以下の記事をご参照ください。

<DELETEの注意点(3)>
https://www.ashisuto.co.jp/cm/analytics-database/delete-notice-3.html

検証バージョンについて

この記事の内容はVertica 9.3で確認しています。

更新履歴

2020/02/13 本記事を公開