コース: プログラミングの基礎:データベース

今すぐコースを受講しましょう

今すぐ登録して、23,700件以上登録されている、業界エキスパート指導のコースを受講しましょう。

インデックス使用上の注意について

インデックス使用上の注意について - SQLのチュートリアル

コース: プログラミングの基礎:データベース

インデックス使用上の注意について

このレッスンでは 頻繁に更新や削除を行う列に インデックスを作成した場合に生じる 問題について説明します。 データベースのテーブルに インデックスを設定すると データに高速に アクセスできるようになります。 ですからデータベース設計に不慣れな人は、 どうしてすべての列に インデックスを設定しないのですか、と 不思議に思うかもしれません。 クラスタ化インデックスは ひとつのテーブルにひとつしか 設定できませんが、 非クラスタ化インデックスは 何個でも付けられます。 それならば確かにすべての列に 非クラスタ化インデックスを 付ければ便利そうですね。 けれどもそう単純な話ではないのです。 実はすべてのインデックスには コストがかかります。 インデックスはデータを読み取る時には メリットがありますが、 データを書き込んだり 変更したりする時には不利になります。 例えばこの従業員テーブルの クラスタ化インデックスは 「EmployeeID」に基づいています。 そして「LastName」に 非クラスタ化インデックス、 「FirstName」にも 非クラスタ化インデックスがあります。 このようにすると 検索の場合にはかなり便利です。 「EmployeeID」でも 「LastName」でも「FirstName」でも インデックスを使って 高速に検索することができます。 けれどもこのテーブルに 行を挿入する時にはどうでしょうか。 クラスタ化インデックスに指定した EmployeeIDが オートインクリメントする数値の場合は、 最後に書き込むだけです。 けれども行を挿入するたびに 非クラスタ化インデックスは、 LastNameで並び替えて、 FirstNameでも並び替えて 書き込む必要があります。 このようにインデックスを付けることで かえって非効率的になるので、 すべての列にインデックスを 付けるようなことはしないのです。 ですからインデックスは 本当に必要とする列に対してだけ 付けるべきです。 あまり使用しない 複数のインデックスを持つよりも、 時々フルテーブルスキャンするほうが はるかに優れています。 このようにインデックスを作成すると データの取得は速くなりますが、 更新は遅くなります。 ですから定期的に 更新や削除を行う列に対しては インデックスを作成しないように…

目次