次のようなテーブルがあるとします。
CREATE TABLE test1 (
id integer,
content varchar
);アプリケーションはフォームの多くのクエリを発行します。
SELECT content FROM test1 WHERE id = constant;事前の準備がない場合、システムは、すべての一致するエントリを見つけるために、行ごとに完全なテーブルをスキャンする必要があります。 多数の行が存在し、そのようなクエリによって返される少数の行 (おそらく0または1) しか存在しない場合、これは明らかに非効率的な方法である。 しかし、システムがインデックスをカラムに維持するように指示されている場合、一致する行を見つけるためのより効率的な方法を使用できます。 たとえば、検索ツリーの数レベルを深く歩くだけでよい場合があります。
同様のアプローチがほとんどのノンフィクションの本で使用されています。読者が頻繁に検索する用語と概念は、本の最後にあるアルファベットのインデックスに収集されます。 関心のある読者は、関心のある資料を見つけるために本全体を読む必要がなく、インデックスを比較的迅速にスキャンし、適切なページにめくることができる。 読者が検索する可能性のある項目を予測することが作成者のタスクであるように、どのインデックスが有用であるかを予測することはデータベースプログラマのタスクである。
次のコマンドを使用して、前述のようにid列にインデックスを作成できます。
CREATE INDEX test1_id_index ON test1 (id);test1_id_indexという名前は自由に選択できますが、後でインデックスの目的を覚えておくことができるものを選択する必要があります。
インデックスを削除するには、DROP indexコマンドを使用します。 インデックスは、いつでもテーブルに追加および削除できます。
インデックスが作成されると、それ以上の介入は必要ありません。テーブルが変更されたときにシステムはインデックスを更新し、シーケンシャルテーブルスキャンよりも効率的であると考えるときにクエリでインデックスを使用します。 ただし、ANALYZEコマンドを定期的に実行して統計を更新し、クエリプランナーが知識に基づいた決定を行えるようにする必要がある場合があります。
インデックスが作成された後、システムはインデックスをテーブルと同期させておく必要があります。 これは、データ操作操作にオーバーヘッドを追加する。 したがって、クエリでほとんどまたはまったく使用されないインデックスは削除する必要があります。