オプティマイザが実行プランを策定した後,RDBMSのエクゼキュータで実行プランを実際に処理します。「SELECT * FROM テーブル1 WHERE カラム1=100」というSQL文で説明しましょう。このSQL文は,カラム1の値が100のレコードを抽出する,という意味でした。

 データベースのデータは,通常ディスク上に格納されています。RDBMSはデータ管理の専用ソフトですが,該当するレコードをディスク上で探す――なんてことはもちろんできません。RDBMSはOS上で実行するプログラムの一つにすぎず,OSの機能を使ってディスクからデータ・バッファ(メモリー)にデータを読み込み,そこで初めて数値や文字列として扱えるようになります。

 ディスクからデータを読み込むには,どこにどのデータがあるのかを知っていなければなりません。具体的には,「テーブルはディスク上のどこに格納しているのか」「テーブルのカラムはどのようなデータ型がどんな順に並んでいるのか」といった情報が必要になります。そうした情報は「スキーマ情報」と呼ばれ,RDBMSの管理するカタログ・データに含まれています。前述したSQL文の場合,テーブル1のディスク上の場所を,スキーマ情報を参照して調べます。

 エグゼキュータはまず,(1)OSのディスク・アクセスの機能を利用してテーブル1をデータ・バッファに読み込み,(2)データ・バッファ上で各レコードのカラム1の値が「100」かどうかを調べます(図1)。そして,カラム1の値が「100」のレコードをひとまとめにし,それらをこのSQL文の結果として返送します。

図1●基本的な動き
図1●基本的な動き
(1)ディスク上のデータをメモリーに読み込み,(2)メモリー上で数値や文字列を解釈する。これがRDBMSの基本的な動きになる

ディスク・アクセスの頻度で良しあし見極め

 ここで考えたいことは,各処理にかかる実行時間です。(1)はディスク上のデータをデータ・バッファに読み込む「ディスク・アクセス」,(2)は値の比較を行うためにデータ・バッファ上のデータを読み取る「メモリー・アクセス」です。この二つの処理にかかる時間は大きく異なります。(1)が1回当たり数ミリ(10の-3乗)秒で,(2)が1回当たり数ナノ(10の-9乗)秒と言われており,圧倒的に(2)ディスク・アクセスの処理時間が長くなります。

 つまり,SQL文の処理時間の長さは,ディスク・アクセスをどれくらい行うかでほぼ決まると言えます。これは,処理手続きの良しあしを判断する上で重要な点なので,よく覚えておいて下さい。

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