連載
» 2017年01月06日 05時00分 UPDATE

ゼロからのリレーショナルデータベース入門(5):SQLチューニングの基礎知識 「データアクセスと索引(インデックス)」の関係を理解する (1/3)

本連載は、企業の成長に不可欠な「データ活用」を推進していくために必要なデータ基盤の基礎を“あらためて”解説していきます。今回は、SQLのチューニングを行う上で最も重要な基礎知識を解説します。【更新版】

[坂田素道,株式会社アシスト]

連載バックナンバー

パフォーマンス向上を見据えた「データアクセス方法」を理解する

 ユーザーによりよいサービスを提供していくために、データベースのパフォーマンスチューニングは欠かせません。これを実現していくには、最低限「データアクセスの仕組み」を理解しておく必要があります。

 第2回「リレーショナルデータベースの3大構成要素とは?」で解説した通り、SQL(Structured Query Language:リレーショナルデータベースのデータを操作するための言語)でのデータアクセスは、ディスクにある表のデータをメモリにロードしてから実行されます。そのため、非効率なデータアクセスはディスクI/Oの多発を招き、パフォーマンスに影響を及ぼします。データアクセス方法の効率とデータベースのパフォーマンスは密接に関係しています。

 従って、パフォーマンス問題を抱えているシステムの多くはSQLによるデータアクセス方法に問題があるといえます。これを改善するのがSQLチューニングです。

 今回は、SQLチューニングを実践していくための基礎知識として、データベース内部で行われる基本的なデータアクセス方法を説解します。

代表的なデータアクセス方法

 SQLは、表や列の名前を指定すれば簡単にデータへアクセスできる便利な言語です。それゆえに、Oracle Databaseをはじめとするリレーショナルデータベース管理システム(RDBMS)には、そのSQLをどのように処理するか(どのようにデータへアクセスするか)を内部的に決定する機能が備わっています。その機能は「オプティマイザー」と呼ばれます。

 オプティマイザーが選択するデータアクセス方法はさまざまな種類がありますが、その中でも代表的なデータアクセス方法として、「全表スキャン」と「索引スキャン」があります。

全表スキャンの特徴

 全表スキャン(フルテーブルスキャン)は、SQLで指定された表の全てのデータにアクセスして、検索条件を満たす行を1行ずつチェックする方法です。

 例えば、以下のSQL文で全表スキャンが行われると、「社員表(EMP表)」の全行にアクセスして、社員名(ENAME列)が「BLAKE」である行を探します(図1)。

SELECT ENAME FROM EMP WHERE ENAME = 'BLAKE';
photo 図1 全表スキャンによるデータアクセス

 全表スキャンは、表を構成しているデータブロックを1回のディスクI/Oでまとめて読み込みます。少ないディスクI/Oで多くのデータにアクセスできる特徴から、データ集計やバッチ処理のように表の大部分のデータにアクセスする操作が中心となるDWH(Data WareHouse)系システムでの利用に適しています(図2)。

photo 図2 全表スキャンでのディスクI/O

 その一方で、前述したSQLのように、「BLAKE」さん1人だけの社員データを検索する場合、全表スキャンが行われると効率が悪くなります。EMP表に格納された全社員のデータにアクセスしなければならず、無駄なデータアクセスが発生するためです。書籍で例えるならば、何かを調べるときに全てのページを読んで探すようなものです。このため、「社員検索」などのように、表の一部のデータにアクセスする操作が中心となるOLTP(OnLine Transaction Processing)系システムには、全表スキャンは適しません。

 このような場合には、目的のデータにピンポイントでアクセスできる「索引スキャン」が有効です。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。