開発者向けのSQLインデックス解説サイト、管理についての間違いない知識を提供します。
インデックスは開発時には忘れられがちである一方で、非常に効果的なSQLのチューニング方法です。Use The Index, Lukeでは、HibernateなどのORMツールの解説にとどまらず、SQLのインデックスについて基礎から説明します。
Use The Index, LukeはSQLパフォーマンス詳解のWeb上の無料版です。サイトを気に入って頂けたら、ぜひ書籍も購入してみて下さい。また、このサイトの運営をサポートする様々なグッズも販売しています。
MySQL、Oracle、SQL ServerなどにおけるSQLのインデックス
Use The Index, Lukeでは、ベンダにとらわれないインデックスの説明を心がけています。製品特有の事柄については、以下のような表示をしています。
- Db2 (LUW)
Use The Index, Lukeでは、IBM Db2におけるインデックスをカバーしています。Db2 for Linux, UNIX and Windows, (LUW) V10.5/12.1 でテストしています。
- MySQL
Use The Index, Lukeでは、MySQLにおけるインデックスをカバーしています。MySQL 5.5と8.0.34でテストしており。
- Oracle
Use The Index, Lukeでは、Oracle databaseにおけるインデックスをカバーしています。Oracle 11gと23aiでテストしており。
- PostgreSQL
Use The Index, Lukeでは、PostgreSQLにおけるインデックスをカバーしています。PostgreSQL 9.0および14でテストしています。
- SQL Server
Use The Index, Lukeでは、Microsoft SQL Serverにおけるインデックスをカバーしています。SQL Server 2008R2および2022でテストしており。
目次
前書き - インデックスの作成はなぜ開発者のタスクなのか
インデックスの 内部構造 - インデックスは何に似ているか
インデックス リーフノード - 二重連結リスト
検索 ツリー(Bツリー) - バランス木
遅いインデックス パートI - インデックスを遅くする2つの原因
where 句 - 検索のパフォーマンスを改善するためにインデックスを作成
等価 演算子 - 一致するキーの検索
プライマリキー - インデックスの使い方を確認
複合インデックス - 複数列に対するインデックス
遅いインデックス パートII - 前の問題点が再び
関数 -
where
句の 中での関数大文字・小文字を区別する 検索 -
UPPER
とLOWER
ユーザ定義 関数 - 関数インデックスの制限
インデックスの作り過ぎ - 冗長性の排除法
パラメータ化 クエリ - セキュリティとパフォーマンスのために
範囲 検索 - 等価条件の一歩先へ
大なり、小なり、
BETWEEN
- 列の順番を 改めて考えるLIKE
フィルタに 対するインデックス - 全文検索用ではないLIKE
インデックスの結合 - 全列に それぞれインデックスを作ってはいけない理由
部分インデックス - 特定の行のみに対するインデックス
Oracleにおける
NULL
- 興味深い重要なことNULL
に対する インデックス - 全てのインデックスは部分インデックスNOT NULL
制約 - インデックスの使われ方に影響部分インデックスを エミュレートする - 関数インデックスを使った方法
処理しにくい条件 - よくあるアンチパターン
パフォーマンスと スケーラビリティ - ハードウェアについて
データ 量 - ずさんなインデックスが牙をむく
システム 負荷 - 本番の負荷がレスポンスタイムに与える影響
レスポンス タイムとスループット - 水平スケーラビリティ(スケールアウト
結合 処理 - 正しく使えば遅くない
データの クラスタリング - IO削減のために
フィルタ述語の意図的な使用 -
LIKE
句のチューニングのためにインデックスのみのスキャン - テーブルアクセスをなくす
索引構成 表 - テーブルを持たないクラスタ化されたインデックス
ソートと グルーピング - パイプライン化された
order by
、3番目の 力インデックスを使った Order by -
where
句の 相互作用ASC
/DESC
とNULL FIRST
/LAST
- インデックスの順番を変えるインデックスを使ったGroup By - パイプライン化された
group by
部分 結果 - 効果的なページング
最初のN行のみの 選択 - 最初の数行のみが必要な場合
次ページの 取得 - オフセットと検索方法の比較
窓関数 - 分析クエリを使ったページネーション
挿入、削除、 更新 - インデックスがDMLに与える影響