インデックス

SQLServer【Index編】#S2_16_プライマリキーとユニークキー

非クラスター化インデックス,クラスター化インデックスの,付加列インデックスの話をしてきました。

プライマリキーを作るとクラスター化インデックスが作成される

今回は手動でクラスター化インデックスを作成して解説しましたが,プライマリキーを作成すると,クラスター化インデックス自動的に作成されます。ですのでクラスター化インデックスを自分で作るというのは現場ではあまりないと思います。

その代わり,プライマリキーを作る時は,クラスター化インデックスができることを理解したうえで,プライマリキーを作成してください。クラスター化インデックスが最速のインデックスなので,意味のない連番などで,プライマリキーを作ると,最速の検索条件を捨てていることになるので,「Id+日付」とか,極力運用で使用する検索キーを想定してプライマリキーを作るようにしてください。

ユニークキーを作ると非クラスター化インデックスが作成される

プライマリキーの時と同様に,ユニークキーを作成すると非クラスター化インデックスが作成されます。なので,ユニークキーに対して個別で非クラスター化インデックスを作成する必要はありません。例えば社員テーブルのメールアドレスなど,重複するはずのない項目はユニークキーにしておくことで,重複したデータ入れられなくなると同時に,メールアドレスでの検索も非クラスター化インデックスが効くことになります。

SQLServerの重複チェックはインデックス行っている

プライマリキーにしても,ユニークキーにしても,重複キーを許しませんよね。これって,重複したデータが入った瞬間にSQLServerは更新エラーを返しますが,どうやってチェックしているかというと,インデックスで行っているのです。インデックスが無かったら,同じ値が入力されてから,10秒くらいしてエラーになる可能性がありますが,キーを作成した時点でインデックスが作成されるため,高速に重複チェックが行われます。なのでSQLServerの処理上必要なので,自動でインデックスが作成されています。

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