本連載は、ITシステム開発の現場でプログラミングやSQLのコーディングを行っているエンジニア(データベース利用者)が、データ管理者(DA)やデータベース管理者(DBA)へステップアップするための第一歩として有効な基礎知識を紹介する。(編集局)
▼はじめに
▼まずはインデックスの仕組みを押さえよう
▼テーブルのデータ構成・取得レコード件数に着目しよう
▼WHERE句の内容に着目しよう
▼テーブル結合に着目しよう
▼チューニングを反映させよう
▼まとめ
前回「システムの寿命はコードで決まる!」ではコード設計について解説しました。今回はデータへの最短ルート、つまりSQLの最も効率的なアクセスパス(実行計画)を見つけ出すためのテクニックを解説します。
SQLはデータベースに関する最も基本的な技術で、まずSQLから学んだ(でいる)という方は多いと思います。しかし、SQLを学ぶ際、データベースから必要なデータを取得する手段を学んでも、どのようなアクセスパスでデータを取得するかは後回しになることが多いのではないでしょうか。
商用のシステムで使用されるSQLは、必要なデータを取得できるだけでは不十分で、どれだけ素早く取得できるかも重要です。データ取得の素早さは、SQLに適用されるアクセスパスの良しあしで決まります。そこで、今回は「どんなアクセスパスが適しているか」「どうやってRDBMSに適切なアクセスパスを利用させるか」を以下のような構成で解説します。
どんなアクセスパスが適しているか
どうやってRDBMSに適切なアクセスパスを利用させるか
なお、特に断りがない場合、RDBMSはOracleデータベースを前提とします。
データへの最短ルート、つまり最適なアクセスパスを見つけ出すためには、インデックスの仕組みを理解していることが前提となります。
インデックス(索引)は、本の索引が目的のページにたどり着くのを助けるのと同様に、データベースから素早く目的のデータを見つけ出すことを助けます。データへの最短ルートは、多くの場合インデックスを経由します。特に大きなテーブルから少量のレコードを取得する際に効果が大きくなる可能性が高く、インデックスを使用するか、フルスキャン注1するかで、処理速度に数千倍の差が出ることもまれではありません。インデックスは図2のように、Bツリー検索のアルゴリズムで検索対象レコードの位置情報(ROWID)を取得します。
注1:フルスキャン
テーブルの行をすべて読み込み、検索条件を満たすかをチェックする検索方式。
Copyright © ITmedia, Inc. All Rights Reserved.