カラム型の効果が期待できる処理
前回は全件検索と一意検索を試しながら、インメモリ・カラムストアの中にストレージ索引という独自の仕組みがあることを紹介しました。今回はより現実的な性能を計測するために、多数の表を結合する分析系のクエリを実行していきます。
検証に使用するのは、前回と同じくStar Schema Benchmarkです。Star Schema BenchmarkはDWHの代表的なデータ・モデルであるスター・スキーマを採用しており、ファクト表であるLINEORDER表を中心に、放射状にディメンション表が配置されています。
LINEORDER表には商品の購入履歴(明細データ)が約6億件格納されており、ディメンション表にはマスター・データ(分析軸)となる顧客IDや商品IDなどの情報が少ない件数で格納されています。LINEORDER表の列は大半がNUMBER型で、顧客名や商品名といった文字列ではなくIDのみが記録されています。何度も出てくる情報を文字列からID(番号)にすることで表のサイズを抑えられますが、分析処理においてはファクト表とディメンション表の結合が必要になります。
結合のイメージを具体的なSQLで見てみましょう。以下のSQLはStar Schema Benchmarkにあらかじめ用意されているもので、1993年の売上高を特定の条件をもとに集計しています。返される結果は1件だけですが、6億件あるLINEORDER表の広範囲にアクセスし、さらにDATE1表との結合も行われるため、それなりに負荷の高いSQLであると言えます。
SELECT SUM(lo_extendedprice*lo_discount) AS revenue FROM lineorder,date1 WHERE lo_orderdate = d_datekey AND d_year = 1993 AND lo_discount BETWEEN 1 AND 3 AND lo_quantity < 25;
本来であれば、こうした「少数の列+多数の行」を扱うSQLはロー型であるOracle Databaseが苦手とする処理です。しかし、カラム型にとっては得意な処理であるため、Oracle Database In-Memoryを使うことで高速化できるはずです。