SQLチューニングの基礎知識 「データアクセスと索引(インデックス)」の関係を理解する:ゼロからのリレーショナルデータベース入門(5)(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';
全表スキャンは、表を構成しているデータブロックを1回のディスクI/Oでまとめて読み込みます。少ないディスクI/Oで多くのデータにアクセスできる特徴から、データ集計やバッチ処理のように表の大部分のデータにアクセスする操作が中心となるDWH(Data WareHouse)系システムでの利用に適しています(図2)。
その一方で、前述したSQLのように、「BLAKE」さん1人だけの社員データを検索する場合、全表スキャンが行われると効率が悪くなります。EMP表に格納された全社員のデータにアクセスしなければならず、無駄なデータアクセスが発生するためです。書籍で例えるならば、何かを調べるときに全てのページを読んで探すようなものです。このため、「社員検索」などのように、表の一部のデータにアクセスする操作が中心となるOLTP(OnLine Transaction Processing)系システムには、全表スキャンは適しません。
このような場合には、目的のデータにピンポイントでアクセスできる「索引スキャン」が有効です。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- SQLの基礎 「SELECT」文を覚えよう
- SQLとはどういう言語か
「SQLは何となく苦手」という人は意外と多いものです。すでに何らかのプログラミング言語を習得している人を見ても、SQLを苦手としている人は少なくありません。そこで、実際にSQLを入力して結果を見ながら学習する連載を始めます。用意するのはインターネットにつながったWebブラウザだけ。気軽に始めてみてください。(編集部) - RDBMS製品のビッグ3、それぞれの“癖”をつかもう
本連載はOracleを使ったデータベースシステムの開発・運用管理にある程度の知識を持つ読者を対象に、Oracle以外の商用RDBMSであるMicrosoft SQL ServerとIBM DB2とのアーキテクチャの違いを明らかにし、マルチベンダに対応できるデータベースシステムの設計・開発・運用ノウハウを紹介していく。(編集局) - NoSQLはRDBMSに取って代わるものなのか?
「memcached」や「Apache Cassandra」、「Apache CouchDB」など、RDBMSとは異なる考えで設計してあるデータベース管理システムが普及しつつあります。この連載では、これら新しいデータベース管理システムの特徴と、RDBMSとの使い分け方について解説します。(編集部)