ゼロからのリレーショナルデータベース入門(5)
SQLチューニングのキモ
データアクセスと索引(インデックス)の関係
支援統括部 教育部
小野 明洋
2009/1/29
パフォーマンス向上とデータアクセス方法
パフォーマンス問題を抱えているシステムの多くは、SQLによるデータアクセス方法に問題があります。もっと効率的なアクセス方法が使用できれば、SQLのパフォーマンスは格段に向上する可能性があります。このような問題は多くの場合、適切な索引(インデックス)を使えていないことによって発生しています。
連載5回目となる今回は、データベース内部で行われる基本的なデータアクセス方法を説明します。具体的なSQLのチューニング技法に触れるわけではありませんが、SQLのチューニングを行ううえでの最も重要な基礎知識を解説します。
1.代表的なデータアクセス方法
SQLは、表や列の名前を指定すれば簡単にデータにアクセスできる非常に便利な言語です。それゆえに、RDBMSには、そのSQLをどのように処理するか(どのようにデータにアクセスするか)を内部的に決定する機能が必要です。その機能は「オプティマイザ」と呼ばれ、RDBMSにとって、とても重要な役割を担っています。
オプティマイザが選択するデータアクセス方法にはさまざまな種類がありますが、その中でも代表的なデータアクセス方法に「全表スキャン」と「索引スキャン」があります。それぞれのアクセス方法には特徴があります。
OLTP(OnLine Transaction Processing、オンライントランザクション処理)系システムでは、いかに索引スキャンを上手に使用できるかが、パフォーマンスを向上させるうえでの重要なポイントとなります。
それでは、この全表スキャンと索引スキャンの違い、特徴について解説します。
2.全表スキャン
全表スキャンは、SQLで指定された表のすべてのデータにアクセスして、WHERE句の条件を満たす行を1行ずつチェックする方法です。例えば以下のSQLでは、EMP表の全行にアクセスし、「DEPTNO列が10」である行を探します(図1)。
SELECT ENAME FROM EMP WHERE DEPTNO = 10;
このアクセス方法は全データにアクセスするため、DEPTNO列が10の行が全体の数行しかないような場合は非常に無駄が多く、効率的であるとはいえません。このようなケースは、後述する索引スキャンの方が適したアクセス方法です。
しかし、全表スキャンは無駄なディスクI/Oを削減するために、表を構成しているデータブロック(第3回「データベースの論理構造ってどんなもの?」参照)を1回のI/Oでまとめてメモリ上に読み込むという特徴を持ちます。そのため、例えば前述のSQLで「DEPTNO列が10」であるデータが表全体の大部分を占めているような場合、結局はほとんどのデータにアクセスする必要があるので、まとめてブロックを読み込める全表スキャンは効率的なアクセス方法です(図2)。
図2 全表スキャンでのディスクI/O
| 1/2 |
| Index | |
| ゼロからのリレーショナルデータベース入門(5) SQLチューニングのキモ データアクセスと索引(インデックス)の関係 |
|
| Page 1 1.代表的なデータアクセス方法 2.全表スキャン |
|
| Page 2 3.索引スキャン 4.索引の注意事項 5.まとめ |
|
| ゼロからのリレーショナルデータベース入門 |
TechTargetジャパン
- IBMが歴史を変える!? 新カテゴリの製品を発表 (2012/5/25)
IBMは新たな製品カテゴリとなる「PureSystems」を発表。DB2 10とビッグデータの関係、PureSytemsの斬新さはどこかに迫ります - クラウド時代のデータ処理を支える分散KVSの可能性 (2012/5/23)
現在、高速データ処理の主流はインメモリ型データ処理だが、別の方法として分散KVSが注目を集めている。今回は分散KVSについて話を聞いた - 複数の表からデータを取り出して表示させる(2) (2012/4/23)
前回はSQLの基本的な結合構文について説明しました。今回は、より複雑な自己結合や外部結合について説明します - SQL Server、OOWにIQ、盛りだくさんの4月 (2012/4/20)
オラクルオープンワールドが3年ぶりに東京で開催されたほか、SQL Server 2012が提供開始されるなど、今月は話題が盛りだくさんです
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
