by Hayato Matsuura.

開発者のためのSQLパフォーマンスの全て


  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. 更新 - テーブルの全インデックスに影響を与えるわけではない

協力してください

この記事が気に入ったら、私の書いた本「SQLパフォーマンス詳解」や私によるトレーニングもきっと気にいるはず。

  1. 実行 計画 - 実行計画を表示し、読み解く

    1. DB2 LUW: 実行計画の作成処理アクセス述語とフィルタ述語の見分け方

    2. MySQL: 実行計画の作成処理アクセス述語とフィルタ述語の見分け方

    3. Oracle: 実行計画の作成処理アクセス述語とフィルタ述語の見分け方

    4. PostgreSQL: 実行計画の作成処理アクセス述語とフィルタ述語の見分け方

    5. SQL Server: 実行計画の作成処理アクセス述語とフィルタ述語の見分け方

  2. 都市伝説の 一覧 - よくある都市伝説と間違った思い込み

    1. インデックスは 劣化する

    2. 最も選択性の高い列を 最初に

    3. Oracleは NULLにインデックスを作れない

    4. 動的SQLは 遅い

  3. スキーマの 例 - CREATEINSERTの スクリプト

    DB2 - MySQL - Oracle - PostgreSQL - SQL Server

著者について

Markus Winandの写真

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

彼の本

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

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

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

Amazon.co.jpで購入
(印刷版のみ)

Do not use offset for pagination

Learn why

Visit my sibling!A lot changed since SQL-92!

Use The Index, Luke のカップは

ステッカー、コースター、本、コーヒーマグ。 学習に必要なものすべて。

今すぐ購入

Connect with Markus Winand

Markus Winand on LinkedInMarkus Winand on XINGMarkus Winand on Twitter
“Use The Index, Luke!” by Markus Winand is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
法律上の通知 | お問い合わせ | 無保証 | 商標 | プライバシーとGDPR | CC-BY-NC-ND 3.0 license