「アプリケーション開発者が,なぜRDBMSの処理の仕組みを知る必要があるのでしょうか」。そうした疑問を持つ読者もいるでしょう。確かに,テーブルにどんなカラムがあるかを調べ,SQL文の書き方を知っていれば,データベース・アプリケーションの開発は可能です。RDBMSの内部でSQL文がどのように処理されるかを把握している必要はありません。

 ですが,SQL文の処理速度に問題が発生したとき,RDBMS内部での処理の仕組みを知っているかどうかで大きな違いが生まれてきます。処理の仕組みを知っていれば,SQL文の処理速度の問題点を見抜けるようになります(図1)。

図1●SQL文の処理速度が遅くなったときに役立つ
図1●SQL文の処理速度が遅くなったときに役立つ
SQL文の処理が遅くなった場合,RDBMS内部での処理の仕組みを知っていれば「ここがおかしい」と見抜くことができる。RDBMS内部での処理の仕組みを知らなければ,「遅くなったけど,なぜだか分からない」となり問題点を見抜くことはできない

どのように処理するかはRDBMSが決める

 どういうことなのか,説明しましょう。コンピュータ上の処理に時間がかかる場合,原因として何を疑いますか?

 「ハードウエアの能力不足」を疑うことが多いと思われますが,処理時間はハードウエアだけで決まるものではありません。プログラムの巧拙にも大きく影響されます。プログラムは正しい値を返すことは当然のことですが,早く処理できる手続きになっていることも重要な点です。

 例えばファイルにデータを格納した場合,アプリケーション・プログラムには,「ファイルをオープンしてデータを1行ずつ順番に繰り返し読み込む」といったことを書くでしょう。こうした処理手続きの巧拙によって,プログラムの処理時間が大きく左右されます。算数の問題で1から100までの整数を足し算する場合,1から順に足していく方法と,1と99,2と98…というように100になる組を作って足し算するという方法では,結果を導き出すまでにかかる時間は異なります。これは紙と鉛筆で計算する場合の例ですが,コンピュータでも同様で,手続きの違いで処理時間に大きな差が生じます。

 では,SQL文の処理手続きについて見ていきましょう。次のSQL文を見てください。

SELECT * FROM テーブル1 WHERE カラム1 = 100
意味:テーブル1の全レコードのうち,カラム1の値が100のレコードを抽出する

 意味を読めば分かるように,SQL文には「何をするか」は書かれていますが,それを「どのように処理するか(処理手続き)」は書かれていません。考えてみれば不思議ですよね。プログラム開発を少しでもかじった方なら,これで「どうやってデータにアクセスするのだろう」と思うことでしょう。

 実は,SQL文の処理手続きは,RDBMSによって自動生成されます。しかも,最適と思われる手続きを自動的に選ぶ機能まで備わっています。自動生成された処理手続きは,「実行プラン(または実行計画)」と呼ばれることが多いです。実行プランはRDBMS内部で勝手に生成されますので,通常のデータベース・アプリケーションの開発において意識することはほとんどありません。ですが,SQL文の処理性能があまり良くない場合,SQL文の実行プランは問題を解決する重要な手がかりになります。

 実行プランの良しあしを見極めるには,SQL文がRDBMS内部でどのように処理されるかを知っておく必要があります。少し長くなりましたが,「アプリケーション開発者がRDBMS内部での処理の仕組みを知るべき理由」を,お分かりいただけたでしょうか。

監修:藤塚 勤也(ふじづか きんや) NTTデータ 基盤システム事業本部 オープンソース開発センタ 技術開発担当 シニアスペシャリスト
沖電気工業,タンデムコンピューターズ(現日本HP)を経て,2003年より株式会社 NTTデータに勤務。現在は,オープンソース・ソフトウエアを活用したエンタープライズ・システム向けの技術開発・技術支援に従事しており,特にシステムの中核であるRDBMSに注力している。「RDBMS解剖学」(翔泳社)を共著