インデックス

SQLServer【Index編】#S2_18_インデックスの注意点

最後にインデックス作成の注意点を解説しておきます。

更新系

インデックスを作成すると,検索は速くなるのですが,更新系は遅くなります。これはインデックスファイルを作成したり,変更したりする時間がかかるためその分負荷がかかるという事です。インデックスは順番通りに並んでいるものなので,当然データが変わったら,インデックスも変更しないといけないので,その分の更新が必要という事です。

これにどれくらい時間がかかるかは,正直試してみないとわかりません。ただ,ユーザーが画面から手で更新する程度なら影響はないですが,夜のバッチ処理など,大量のデータの更新が発生する場合は,1時間で終わっていた処理が,インデックスを入れたせいで,3時間になったなどの例はあります。こればっかりは,想定されるマシン構成で負荷テストを実施する必要があります。

インデックスが効かないパターン

せっかく作成したインデックスも,効かないパターンがあります。例えば前方一致以外のLike検索です。前方一致ならいいのですが,文字列の真ん中とか,後方一致にインデックスは効きません。インデックスの並びをイメージしてもらうとわかると思いますが,例えばアルファベット順に並んでいる場合に「A」で始まるものならインデックスを使えますが,最後が「A」のやつって言われても困りますよね。結局全部見る必要がありますから,IndexScanなどになります。

あと検索条件で関数を使うようなケースです。要するにインデックスに入っている値を加工して検索するような場合は,インデックスがうまく使えない場合があります。

インデックスがうまく効いているかどうかは,結局実行プランをみればわかるので,SQLを書いたら,実行プランを見るという習慣を付けましょう。

SQLServerインデックスを理解して検索を高速にする方法