インデックスとは
データベースでは膨大なデータの中から条件に合致したデータを取り出しすことがよくあります。このようなときにデータを検索する方法として、大きく分けると2つあります。1つは、最初のデータから順番に比較して検索していく方法です。この場合、最短で1回の比較、最長で全データの件数分の比較を行うことになります。もうひとつは、直接検索と呼ばれるインデックスを使った検索方法です。これは全データを半分ずつに分けながら評価していく方法です。
この図のようにインデックスは2つに分岐している見出しのようなものになります。このように完全に2つに分岐していることを「バイナリツリー」と呼びます。また、2つに分岐したインデックスという見出しから、条件判別を行い、どこにデータがあるか探していくことができるのです。
平均検索回数や平均検索時間を考えると、データ全体を最初から順番に比較して検索する場合よりも、インデックスをたどるやり方のほうが、回数が少なく短時間になります。
インデックスを作成する
表にインデックスを作成するにはCREATE INDEX文を使い、インデックスを作成する表はONキーワードの後ろに指定します。インデックスは表内の特定の列の値をもとに作成さあれることになるので、列名を指定する必要があります。
書式
CREATE [UNIQUE] INDEX <インデックス名>
ON <表名> (<列名1>[,列名2...])
CREATE [UNIQUE] INDEX <インデックス名>
ON <表名> (<列名1>[,列名2...])
CREATE INDEX命令でUNIQUEキーワードを指定すると、重複のないインデックスを作成することができます。これを「ユニークインデックス」と呼びこともあります。このときインデックスの対象となる別のデータの値を検証し、重複があるとエラーになります。さらにインデックスを作成した後に、インデックスが作成されている列に対して重複するデータを挿入、または更新しようとすると、それぞれの処理はエラーになります。
次の例では、「TableA」と「column1」列のインデックスを「idx1」という名前で作成しています。
SQL文 CREATE INDEX idx1 ON TableA (column1);
実行結果 索引が作成されました。
実行結果 索引が作成されました。
また、ユニークインデックスを作成するときは、次のようにします。
SQL文 CREATE UNIQUE INDEX idx1 on Table1 (column1);
インデックスを削除する
作成したインデックスが不要になったら、削除することができます。インデックスの削除には DROP INDEX文を用います。DROP INDEX文キーワードに続いて削除するインデックス名を指定します。MS-SQLとMSAccessでは、どの表のインデックスかも指定する必要があるので、表名も指定します。
書式
ORACLE DROP INDEX <インデックス名>;
MS-SQL DROP INDEX <表名>, <インデックス名>;
MSAccess DROP INDEX <表名> ON <インデックス名>;
ORACLE DROP INDEX <インデックス名>;
MS-SQL DROP INDEX <表名>, <インデックス名>;
MSAccess DROP INDEX <表名> ON <インデックス名>;
SQL文
ORACLE DROP INDEX idx1;
MS-SQL DROP INDEX TableA, idx1;
ORACLE DROP INDEX idx1;
MS-SQL DROP INDEX TableA, idx1;
実行結果 索引が削除されました。
関連リンク
SQLの基礎知識
【SQLの基礎知識】基本ルールや基礎の基礎をマスターしよう
こちらの記事を読み進めることで、SQLの基礎が充分に身に付きます。これからSQLを身に着けたい初心者・入門者の方に最適です。データベース製品ごとに表現方法が異なることがありますので、ある程度SQLのスキルがある方も利用できるサイトです。
SQL関数一覧
SQLリファレンス > 関数
ORACLE、MS-SQL Server、MS-Access、MySQLで使用する関数の一覧表です。いちれべ.comは、オラクル、MS-SQL Server、MS-Access で使用可能か一目でわかるのが特徴のSEサポートサイトです。