by Hayato Matsuura.

SQLのインデックスとそのチューニングについてのオンラインブック


開発者向けのSQLインデックス解説サイト、管理についての間違いない知識を提供します。

インデックスは開発時には忘れられがちである一方で、非常に効果的なSQLのチューニング方法です。Use The Index, Lukeでは、HibernateなどのORMツールの解説にとどまらず、SQLのインデックスについて基礎から説明します。

Use The Index, LukeSQLパフォーマンス詳解のWeb上の無料版です。サイトを気に入って頂けたら、ぜひ書籍も購入してみて下さい。また、このサイトの運営をサポートする様々なグッズも販売しています

MySQL、Oracle、SQL ServerなどにおけるSQLのインデックス

Use The Index, Lukeでは、ベンダにとらわれないインデックスの説明を心がけています。製品特有の事柄については、以下のような表示をしています。

DB2

Use The Index, Lukeでは、IBM DB2におけるインデックスをカバーしています。DB2 for Linux, UNIX and Windows, (LUW) V10.5/11.1 Express-Cでテストしています。

MySQL

Use The Index, Lukeでは、MySQLにおけるインデックスをカバーしています。MySQL 5.5と8.0でテストしており。

Oracle

Use The Index, Lukeでは、Oracle databaseにおけるインデックスをカバーしています。Oracle 11gと12cでテストしており。

PostgreSQL

Use The Index, Lukeでは、PostgreSQLにおけるインデックスをカバーしています。PostgreSQL 9.0および9.6でテストしています。

SQL Server

Use The Index, Lukeでは、Microsoft SQL Serverにおけるインデックスをカバーしています。SQL Server 2008R2および2017でテストしており。

目次

  1. 前書き - インデックスの作成はなぜ開発者のタスクなのか

  2. インデックスの 内部構造 - インデックスは何に似ているか

    1. インデックス リーフノード - 二重連結リスト

    2. 検索 ツリー(Bツリー) - バランス木

    3. 遅いインデックス パートI - インデックスを遅くする2つの原因

  3. where 句 - 検索のパフォーマンスを改善するためにインデックスを作成

    1. 等価 演算子 - 一致するキーの検索

      1. プライマリキー - インデックスの使い方を確認

      2. 複合インデックス - 複数列に対するインデックス

      3. 遅いインデックス パートII - 前の問題点が再び

    2. 関数 - where句の 中での関数

      1. 大文字・小文字を区別する 検索 - UPPERLOWER

      2. ユーザ定義 関数 - 関数インデックスの制限

      3. インデックスの作り過ぎ - 冗長性の排除法

    3. パラメータ化 クエリ - セキュリティとパフォーマンスのために

    4. 範囲 検索 - 等価条件の一歩先へ

      1. 大なり、小なり、 BETWEEN - 列の順番を 改めて考える

      2. LIKEフィルタに 対するインデックス - 全文検索用ではないLIKE

      3. インデックスの結合 - 全列に それぞれインデックスを作ってはいけない理由

    5. 部分インデックス - 特定の行のみに対するインデックス

    6. OracleにおけるNULL - 興味深い重要なこと

      1. NULLに対する インデックス - 全てのインデックスは部分インデックス

      2. NOT NULL 制約 - インデックスの使われ方に影響

      3. 部分インデックスを エミュレートする - 関数インデックスを使った方法

    7. 処理しにくい条件 - よくあるアンチパターン

      1. 日付型 - DATE型には特に注意

      2. 数値文字列 - 型を混在させないこと

      3. 列の連結 - 冗長なwhere

      4. スマートなロジック - SQLを 遅くする、一番スマートな方法

      5. 数式 - データベースは 方程式を解けない

  4. パフォーマンスと スケーラビリティ - ハードウェアについて

    1. データ 量 - ずさんなインデックスが牙をむく

    2. システム 負荷 - 本番の負荷がレスポンスタイムに与える影響

    3. レスポンス タイムとスループット - 水平スケーラビリティ(スケールアウト

  5. 結合 処理 - 正しく使えば遅くない

    1. 入れ子 ループ - ORMを使用した場合のN+1問題

    2. ハッシュ 結合 - 全く違うインデックス作成のやり方

    3. ソートマージ 結合 - まるでソートされた結果のジッパー

  6. データの クラスタリング - IO削減のために

    1. フィルタ述語の意図的な使用 - LIKE句のチューニングのために

    2. インデックスのみのスキャン - テーブルアクセスをなくす

    3. 索引構成 表 - テーブルを持たないクラスタ化されたインデックス

  7. ソートと グルーピング - パイプライン化されたorder by、3番目の 力

    1. インデックスを使った Order by - where句の 相互作用

    2. ASC/DESCNULL FIRST/LAST - インデックスの順番を変える

    3. インデックスを使ったGroup By - パイプライン化されたgroup by

  8. 部分 結果 - 効果的なページング

    1. 最初のN行のみの 選択 - 最初の数行のみが必要な場合

    2. 次ページの 取得 - オフセットと検索方法の比較

    3. 窓関数 - 分析クエリを使ったページネーション

  9. 挿入、削除、 更新 - インデックスがDMLに与える影響

    1. 挿入 - インデックスから直接の 恩恵は得られない

    2. 削除 - where句に インデックスを使用

    3. 更新 - テーブルの全インデックスに影響を与えるわけではない

著者について

Markus Winandの写真

Markus Winand氏は、開発者がSQLパフォーマンスを改善するお手伝いをしています。彼は、SQL Performance Explainedの 著者でもあり、出張トレーニングhttp://winand.at/での リモート講義も 行っています。

彼の本

カバー『SQLパフォーマンス詳解』

核心をわかりやすく 解説。

Markusから購入します
(送料無料+PDF)

Amazonで購入
(印刷版のみ)

“Use The Index, Luke!” by Markus Winand is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
法律上の通知 | 接触 | 無保証 | 商標 | Privacy and GDPR | CC-BY-NC-ND 3.0 license