Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

Oracle Database In-Memoryは本当に激速なのか(後編)

2014/10/16 00:00

 前回はOracle Database In-Memoryで全件検索と一意検索を実行し、従来のアクセス方法と比べて数十倍の性能になっていることを確認しました。今回は結合処理などもう少し踏み込んだパターンについて、動作のポイントを紹介します。

カラム型の効果が期待できる処理

 前回は全件検索と一意検索を試しながら、インメモリ・カラムストアの中にストレージ索引という独自の仕組みがあることを紹介しました。今回はより現実的な性能を計測するために、多数の表を結合する分析系のクエリを実行していきます。

 検証に使用するのは、前回と同じくStar Schema Benchmarkです。Star Schema BenchmarkはDWHの代表的なデータ・モデルであるスター・スキーマを採用しており、ファクト表であるLINEORDER表を中心に、放射状にディメンション表が配置されています。

 LINEORDER表には商品の購入履歴(明細データ)が約6億件格納されており、ディメンション表にはマスター・データ(分析軸)となる顧客IDや商品IDなどの情報が少ない件数で格納されています。LINEORDER表の列は大半がNUMBER型で、顧客名や商品名といった文字列ではなくIDのみが記録されています。何度も出てくる情報を文字列からID(番号)にすることで表のサイズを抑えられますが、分析処理においてはファクト表とディメンション表の結合が必要になります。

図1:Star Schema Benchmarkのデータ・モデル
図1:Star Schema Benchmarkのデータ・モデル

 結合のイメージを具体的な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を使うことで高速化できるはずです。

※この続きは、会員の方のみお読みいただけます(登録無料)。


著者プロフィール

  • 関 俊洋(セキ トシヒロ)

    株式会社アシスト データベース技術本部 データベース・エバンジェリスト データベース・システムの構築や運用トラブルの解決といったフィールド・サポート業務を経験し、その後は新製品の検証やソリューションの立ち上げに従事。現在はデータベースの価値や魅力を伝えるための執筆や講演活動を行っている。

バックナンバー

連載:既存の概念を覆す!Oracle Database In-Memoryのテクノロジー
All contents copyright © 2007-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5