ポイント
・高度なインデックスやジョインを利用し,最短経路でデータにアクセス
・メモリー不足を自律的に解消し,キャッシュのヒット率を高める
・インメモリーDBは全データをメモリーで処理し,高速化を図る

 目的地に早く到着したいなら,最短の経路を最速で行けばよい。これはデータベース(DB)でも同様だ(図1)。インデックスなどを使ってデータへの最短経路を見つけ,メモリー・アクセスを増やして,最速でたどり着く。DBにはそんな技術が詰まっている。

図1●データベース高速化技術のポイント
図1●データベース高速化技術のポイント
ビットマップ・インデックスなどを使い、データにたどり着く最短の道を選ぶ。また、できるだけメモリーにデータをキャッシュさせておくことで、アクセスのスピードを上げる、という二つのポイントがある
[画像のクリックで拡大表示]

 以下では,(1)データにたどり着く最短の道を選ぶ仕組みと,(2)アクセスのスピードを上げる仕組みの二つを解説していく。

 説明の都合上,簡略化したテーブルとデータを使って図解する。

1と0のビット計算だけで絞り込む

 最短経路を選ぶ機能は,管理者が意図して利用するものと,SQL文の実行計画を決める「オプティマイザ」が実行するものがある。

 前者の代表例がインデックスである。一般的には,B-Treeインデックスが使われる。しかし,「男女など,検索する値の種類が少ない場合は効果が薄い」(NTTデータ オープンソース開発センタ 技術開発担当 シニアスペシャリスト 藤塚勤也氏)。こうしたケースで最短経路を確保できるのが,ビットマップ・インデックスだ(図2)。このインデックスは,あるデータに該当するか否かを1と0で表す。そのため,「男かつ右利きである人の氏名」など,複数条件で検索する場合,ビット計算だけで必要なレコードを取り出せる。

図2●ビットマップ・インデックスの仕組み
図2●ビットマップ・インデックスの仕組み
実データの比較をせず,ビットマップ・インデックスの論理演算だけでデータを探し出せるので,必要なデータに効率よくたどり着ける
[画像のクリックで拡大表示]

 なお,ビットマップ・インデックスの作成には時間がかかるので,更新や挿入が多いテーブルでは注意して使いたい。

ムダなデータは読み込まない

 必要なデータを取得するに当たっては,ムダなデータはできるだけ読み込みたくない。寄り道せずにゴールに向かう手法の一つが,「パーティショニング」と呼ぶ分割機能である(図3)。例えば,1年間の売り上げデータを格納したテーブルを,月ごとに論理的に分割して操作するといったことが可能になる。パーティション単位にアクセスすることで,ムダなデータの読み込みが防げる。

図3●パーティショニングと並列処理の仕組み
図3●パーティショニングと並列処理の仕組み
パーティショニングは,テーブルを論理的に分割した「パーティション」単位でデータを操作するので,不要なデータにアクセスしなくて済む。パラレル・クエリーに代表される並列処理は,複数のサーバー・プロセスに分割して処理を進めることで,高速化を図っている
[画像のクリックで拡大表示]

 データに効率的にアクセスする方法に,並列処理がある(図3下)。SQL文の処理を複数のプロセスに分割し,テーブルに対して並行で実行する。アシストの岸和田隆氏(データベース事業部 技術部 課長)は,「パーティションのそれぞれに,並列処理で同時にアクセスすれば,より効率的にアクセスできる」と語る。

>>後編