インデックスとデータのスキャン
インデックスとは
インデックスとはテーブルの情報を探す時に検索の対象としてよく使用するカラムの値だけを取り出して検索しやすいようにしておいたものです。
インデックスの仕組
検索に必要なキー項目とデータ行が格納されているROWIDだけど保管するため、大量のデータ群から簡単に対象のデータを検索できます。
そもそも検索の方法は?
いろいろありますが、ここでは2つのパターンを紹介します。
フルテーブルスキャン
フルテーブルスキャンは、SQLで指定されたテーブルを頭から1行1行読み込んで検索条件を満たす行を検索する方法です。
数十件程度のテーブルであれば、フルテーブルスキャンの方が早いです。
インデックススキャン
インデックススキャンは、インデックスを使って、条件に該当するデータの場所を特定してから、表にアクセスする方法です。
インデックスには検索条件(where条件の項目)のキー項目とROWIDを保管しているため条件に該当するデータの場所(≒ROWID)を高速につきとめます。
使い方によって2時間かかってたSQLが2分で終わるとかざらにあります。
インデックスのデメリット
- SQLの検索条件となっているキー項目で張らないと意味がありません
- 検索は早くなってもUpdate/Delete/Insertが遅くなる可能性があります
- インデックスのメンテナンスは必ず夜間バッチ完了後に実施しましょう
インデックスはちゃんと考えて作りましょう。