氷以外のスキーマオブジェクトである、索引、ビュー、ストアドプログラムについて

■索引

索引は、検索時のディスク1/Oを減らし、表データの検索を高速にするために作成するオブジェクトです。

索引の役割は、書籍の巻末に付いている索引をイメージすると理解しやすいです。書籍の索引を利用すれば、ページ数の多い中から、特定の情報が載っているページを素早く見つけ出すことができます。データベースの索引の役割もこれと同じです。

データベースの索引には、キーワードと格納されている表のデータブロックのアドレスが記載されており、これらの情報を利用すると目的のデータにダイレクトにアクセスできます。

索引の特徴

・索引は、索引セグメントとして、記憶領域を使用するオブジェクトである。

・索引を作成する際は、表領域を指定できる。

・索引は、表を関連付けられる。

・索引は、表内の1つ以上の列に対して、作成できる。

・表に主キー制約または、一意キー制約を指定すると、その列には索引が暗黙的に作成される。

・索引は、表のデータがDML文によって、挿入、更新、削除されると、それに伴って自動的にメンテナンスされる。

データベースが索引を使用するか否かは、ユーザがデータへアクセスした際に自動的に判断されるため、索引を作成したとしても、その索引が使用されるかどうかは保証されません。

データベースが索引を使用した方が、効率的なアクセスパスになると判断した場合のみ、索引は利用される。

索引をなるべく使用させたい場合は、検索条件に指定されている列に索引を作成しておく。

■SQL Developerを使用した索引の作成

[1]表に索引の列を作成します。

索引はUSERS表領域に格納します。

索引を右クリックして、新規索引作成をクリックします。

[2]名前フィールドに索引の名前を入力して、索引を作成するスキーマおよび表名を選択します。列名または式フィールドに項目名を選択して、+追加アイコンをチェックします。表領域を指定するために右上の詳細チェックボックスをチェックします。

[3]索引の作成の詳細ウィンドウが開きます。プロパティを選択して、記憶域オプションボタンをクリックします。

[4]表領域を選択して、OKボタンを押します。

[5]OKボタン押下で、索引が作成されます。

■SQL文を使用した索引の作成

SQL文を使用して、索引を作成するには、CREATE INDEX文を用います。

▼索引のタイプ

索引には、標準-Bツリー、ビットマップといった索引のタイプがあります。

標準-Bツリー索引は、Bツリー(バランスツリー)というツリー構造になっています。索引の各ブロックには、索引キーの各値のエントリと値が格納されている行のディスク上のアドレスが含まれています。Bツリー索引がデフォルトであり、一般的に使われる索引です。

ルートブロックからブランチブロック、リーフブロックへと遡ていきます。リーブロックから実際の表のデータブロックにダイレクトにアクセスします。

一方で、ビットマップ索引は、主にデータウェアハウス環境で使用します。

■SQL Developerを使用した索引の削除

SQL Developerを用いて、索引を削除することができます。

[1]削除する索引を右クリックして削除をクリック選択します。

[2]適用ボタンを押下します。

[3]索引が削除されたという確認メッセージが表示されます。

■SQL文を用いた索引の削除

DROP INDEX文を用いて、索引を削除することができます。

制約を作成したことで、暗黙的に作成された索引は、制約の機能を実現するために使用される。そのため、SQL文やツールを使って削除することができません。

この場合、制約を無効にするか、制約を削除することで自動的に索引を削除することができます。

■ビュー

ビューは、1つまたは複数の表やビューをもとにして、作成する仮想の表です。

ビューは、フィルタのようなもので、表やビューのデータをカスタマイズして表示することができる。

ビューの実態は、SQLのSELECT文です。ユーザがROM句に表TABLEの代わりにビューを指定すると、ビューとして、定義されたSELECT文が実行され、ビューの基礎となっている表からデータが取り出されます。

ビューには、データは格納されていません。

ビューの基礎となっている表をビューの実表と呼ぶ。

■ビューの作成するメリット

ビューを使用すると、複雑なSELECT文を簡略化できます。例えば、目的のデータを取得するSELECT文が複雑(多くの表を結合する結合構文など)になってしまう場合に、そのSELECT文を事前にビューとして定義しておけば、ユーザはROM句にそのビュー名を指定するだけで目的のデータをかんたんに取得できます。

例えば、社員表の給与列のように、全てのユーザには、見せたくない越については、その列を除いたビューを作成しておき、一般ユーザには社員表ではなく、そのビューを参照させることで、セキュリティの機能を実装することができる。

このとき、実表に対するオブジェクト権限は与えず、ビューに対してオブジェクト権限のみを与えるだけでビューにアクセスできるため、実表のセキュリティレベルを向上させることができる。

ビューに対して、DML(INSERT文、UPDATE文、DELETE文)を実行することもできます。この場合は、実表に対するデータの変更となります。

■SQL Developerを使用したビューの作成

[1]データを1件挿入します。ビューを右クリックして新規ビューをクリックします。

[2]ビューの作成ウィンドウが表示されます。ビューの名前を入力して、SQL問合せを入力します。定義が終わったら、OKボタンを押下します。

□ストアドプログラムの管理

データベースには、アプリケーション開発者が作成したプログラムを格納できます。これらのデータベースに格納されたプログラムのことをストアドプログラムまたは、データベース常駐型プログラムユニットと呼びます。

■ストアドプログラムとは

ストアドプログラム(データベース常駐型プログラムユニット)とは、PL/SQLまたはJavaで記述されたプログラムであり、アプリケーション開発者がOracleデータベース内に作成するスキーマオブジェクトです。

PL/SQLは、SQLに対するOracleの手続き型言語拡張です。データベースの中に共通で使用するプログラムを格納しておくと、任意のアプリケーションプログラムから呼び出して使用できるメリットがあります。

これらのプログラムコードは、SQL Dveloperで管理できます。(オブジェクトの作成、コンパイル、シノニム(別名)の作成、権限の付与、依存性の表示など)

作成できるプログラムコードのタイプは下記の通りです。

タイプ説明
パッケージ仕様部型、変数、定数、例外、カーソル、およびパッケージの外から参照できるサブプログラムを宣言する
パッケージ本体パッケージ本体部、カーソルの問合せとパッケージに定義されたプロシージャとファンクションなどのサブプログラムのPL/SQLコードを定義する。
プロシージャ単一のタスクを実行するプログラム
ファンクション単一のタスクを実行するプログラム。呼び出し元のプログラムに値を戻す必要がある。
トリガー表、ビュー、インベントに関連付けられたプログラム

パッケージとは、論理的に関連するプロシージャとファンクション、およびこれらが使用するカーソルや変数を1つのグループにまとめたスキーマオブジェクトです。

通常、パッケージは、仕様部と本体部の2つの部分で構成されている。

仕様部がインタフェースとなり、実際の処理が記述されている本体部は、ブラックボックスと考えることができる。