.NET開発者のためのブログメディア

SQL Serverのインデックスについて概要と作成方法を紹介
エンジニアやプログラマーであれば、一度はデータベース定義書なるものを現場で活用したことがあるかと思います。様式は現場によって様々ですが、その定義書にはおそらく「インデックス」項目が存在しているのではないでしょうか。この記事では、SQL Serverを使用して、インデックスについての理解を深めてみようと思います。
- SE
- インデックスって聞いたことがあるのですが、具体的にはどのような役割を担っているのでしょうか?
- PL
- 一言でいうと「目次」の働きをしてくれます。テーブルに目次を付けるというイメージでインデックスについて確認していきましょう。
目次
SQL Serverのインデックスとは
インデックスを付与していないテーブルに対してSELECTを行うと、常にテーブルの全レコードを取得してしまいます。マスタテーブルでしたらそれほど問題にはならないと思いますが、何万件と格納されているトランザクションテーブルに対してこれを行うと、検索のパフォーマンスがかなり悪くなります。
インデックスを設定していると、このインデックスはテーブルの目次のような働きをしてくれます。
SQL Serverのインデックス作成方法
SQL Severのインデックスは大きく分けて2種類あります。それは「クラスター化インデックス」と「非クラスター化インデックス」です。
クラスター化インデックス
テーブルに格納されているレコードをインデックスで指定した列の値で並び替えて格納します。値が同じ場合は、2番目に指定した列の値で並び替えます。このクラスター化インデックスは、テーブルに対して1つしか作成できません。
1 |
CREATE CLUSTERED INDEX index1 on dbo.city (id,cityname); |
非クラスター化インデックス
レコードの並び替えは行われずにテーブルに格納されています。インデックスで指定した列の値に対応するレコードへのポインタがインデックスファイルに格納されます。テーブルに対して複数のインデックスを付与することができるのも特徴のひとつです。
1 |
CREATE NONCLUSTERED INDEX index2 on dbo.Kyouka (id,RisyuKyouka); |
- SE
- インデックスって目次のような働きをしてくれるのですね。これからは積極的に活用していきます。
- PL
- 本も目次があると、読みたい内容がどこにあるかすぐに分かると思います。それと一緒でテーブルに対してインデックスを付与してあげると、検索スピードが当然上がります。検索画面で検索結果がなかなか返ってこないプログラムを作らないように、インデックスを付与することは忘れずに行いたいところですね。
検索のパフォーマンスを考えたテーブル設計を行いましょう
今回はSQL Serverでのインデックスがメインでしたが、インデックス自体は他のデータベースにも存在します。インデックスの概念を理解しておけば、検索のパフォーマンスを考慮したテーブルの作成をどのデータベースに対しても行えます。エンジニアとしてテーブル設計に携わる機会が訪れた時には、ぜひインデックスは有効活用するように心がけましょう。