Verticaではプロジェクションを最適化することで、データが最適な順番でソートされるため、検索パフォーマンスを向上させることができます。
Databae Designer(DBD)で最適化を実行後、意図した順番でソートされているか確認したい場合は、DBD実行時に出力されるデプロイファイル(XXX_deploy.sql)で確認できますが、vsql上からも確認できます。
プロジェクションのソート順の確認方法
1)以下のSQLを実行し、ソート順を確認したいプロジェクション(テーブル)のプロジェクション名を確認します。
SELECT * FROM projections
WHERE projection_schema='スキーマ名'
AND
anchor_table_name='テーブル名';例)table1のプロジェクション名を確認する場合
dbadmin=> SELECT anchor_table_name,projection_name
dbadmin-> FROM projections
dbadmin-> WHERE projection_schema='public'
dbadmin-> AND
dbadmin-> anchor_table_name='table1';
anchor_table_name | projection_name
-------------------+-------------------
table1 | table1_DBD_seg_b0
table1 | table1_DBD_seg_b1
(2 rows)2)以下のSQLを実行し、手順1)で確認したプロジェクションのソート順を確認します。
SELECT table_name,table_column_name,column_position,sort_position
FROM projection_columns
WHERE table_schema='スキーマ名'
AND
table_name='テーブル名'
AND
projection_name='手順1)で確認したプロジェクション名'
ORDER BY column_position;※K-safetyが1以上になっている場合は、レプリカのプロジェクションが存在するため、手順1)の例のように、1つのテーブルに対して複数のプロジェクションが存在します。その場合は、どちらか一方のプロジェクション名を指定します。
例)table1_DBD_seg_b0プロジェクションのソート順を確認する場合
dbadmin=> SELECT table_name,table_column_name,column_position,sort_position
dbadmin-> FROM projection_columns
dbadmin-> WHERE table_schema='public'
dbadmin-> AND
dbadmin-> table_name='table1'
dbadmin-> AND
dbadmin-> projection_name='table1_DBD_seg_b0'
dbadmin-> ORDER BY column_position;
table_name | table_column_name | column_position | sort_position
------------+-------------------+-----------------+---------------
table1 | 日付 | 0 |
table1 | 顧客ID | 1 |
table1 | 店舗 | 2 | 1
table1 | エリア | 3 | 0
table1 | 売上高 | 4 |
(5 rows)上記例の場合、table1のプロジェクションは、エリア列、店舗列の順にソートされていることが確認できます。
[projection_columns]
列名 | 内容 |
|---|---|
table_name | テーブル名 |
table_column_name | 列名 |
column_position | 列の順番 |
sort_position | 列のソート順 |
参考情報
admintoolsを利用したDatabase Designerの実行手順
https://www.ashisuto.co.jp/cm/analytics-database/execute-database-designer-using-admintools.html
検証バージョンについて
この記事の内容はVertica 9.1で確認しています。