SQL Serverを使っていると、「処理が遅いな」「クエリの実行時間をなんとか短くしたい」と感じることってありませんか?
そんなときに頼りになるのが“インデックス”です。
でも、インデックスって何となく難しそうなイメージがありませんか?「クラスタード?ノンクラスタード?」「どの列に付ければいいの?」など、最初は疑問だらけかもしれません。
本記事では、SQL Serverにおけるインデックスの基本的な仕組みから、実際の作成・登録方法までを、できるだけわかりやすく・丁寧に解説していきます。
「インデックスって聞いたことはあるけど、自分で作ったことはない…」という初心者の方でも安心して読み進められる内容になっていますので、ぜひ最後までお付き合いください!
インデックスの基本概念
まずは「インデックスってそもそも何?」というところから押さえておきましょう。
インデックスとは、データベース内の検索を高速化するための“道しるべ”のようなものです。
例えるなら、図書館の「本の目次」や「本棚の分類表」のような役割を持っていて、必要な情報をすばやく探し出せるようにしてくれます。
SQL Serverでは、主に次の2種類のインデックスが使われます。
クラスタードインデックス
クラスタードインデックスは、テーブル内のデータ自体がインデックスの並び順に従って格納されるタイプです。
つまり、インデックス=データの並び順というイメージですね。
1つのテーブルにはクラスタードインデックスは1つだけしか作成できません。なぜなら、テーブルの並び順は1つにしかできないからです。
よくあるのは、主キー(PRIMARY KEY)にクラスタードインデックスが自動で設定されるケースです。
ノンクラスタードインデックス
ノンクラスタードインデックスは、データとは別に保持される“索引”のようなものです。
書籍でいうと、「巻末の索引ページ」みたいなイメージですね。
こちらは1つのテーブルに複数作成できるのが特徴です。
必要な列に対してピンポイントでインデックスを作成することで、検索クエリのパフォーマンスを大きく改善できます。
インデックスの作成方法
インデックスの基本を押さえたところで、いよいよ本題です。
このセクションでは、実際にSQL Serverでインデックスを作成・登録する方法を2つのやり方でご紹介します。
方法1:SQL Server Management Studio(SSMS)を使った作成
GUIでの操作は、SQL Server初心者にとってもわかりやすく、手順を確認しながら進められるのが魅力です。
▶ 操作手順
- SSMSで対象のテーブルを右クリック
- 「インデックス」→「新しいインデックス」→「非クラスタ化インデックス」などを選択
- インデックス名や対象の列を設定
- 「OK」をクリックして作成!
インデックスを作成する列には、WHERE句やJOIN句でよく使われる列を選ぶのがポイントです。
主キーや一意制約(UNIQUE)を作成した場合は、自動的にインデックスが張られる点も覚えておくと◎
方法2:T-SQLでの作成(スクリプト実行)
GUIも便利ですが、開発や本番環境ではT-SQLでのインデックス作成が一般的です。スクリプト化しておけば、再利用やバージョン管理もしやすくなります。
クラスタードインデックスの作成
CREATE CLUSTERED INDEX IX_Users_Id
ON Users(Id);
ノンクラスタードインデックスの作成
CREATE NONCLUSTERED INDEX IX_Users_Email
ON Users(Email);
複数列にまたがるインデックス
CREATE NONCLUSTERED INDEX IX_Orders_CustomerId_Date
ON Orders(CustomerId, OrderDate);
インデックス名(例:IX_テーブル名_列名
)にはある程度の規則性を持たせると、管理しやすくなります。
まとめ
今回は、SQL Serverにおけるインデックスの基本から作成・登録方法までをじっくり解説しました。
✔ インデックスとは、検索処理を高速化するための“道しるべ”のようなもの
✔ クラスタードインデックスはデータそのものの並び順を決めるもの(1テーブルに1つだけ)
✔ ノンクラスタードインデックスは、データとは別に作成できる“索引”のようなもの(複数作成可能)
✔ インデックスの作成方法は、GUI(SSMS)でもT-SQLでも可能
✔ 作りすぎや誤った使い方は逆にパフォーマンス低下の原因になるため、使いどころを見極めることが重要
インデックスは、適切に設計・運用することでSQL Serverのパフォーマンスを大きく改善できる強力な武器になります。
「なんとなく遅い…」と思ったとき、まず見直すべきポイントの一つです。
コメント