by Hayato Matsuura

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



SQL

SQLUse The Index, LukeHibernateORMSQL

Use The Index, LukeSQLWeb

MySQLOracleSQL ServerSQL


Use The Index, Luke
DB2

Use The Index, LukeIBM DB2DB2 for Linux, UNIX and Windows, (LUW) V10.5/11.5 

MySQL

Use The Index, LukeMySQLMySQL 5.58.0.34

Oracle

Use The Index, LukeOracle databaseOracle 11g23ai

PostgreSQL

Use The Index, LukePostgreSQLPostgreSQL 9.014

SQL Server

Use The Index, LukeMicrosoft SQL ServerSQL Server 2008R22022

目次

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

You can’t learn everything in one day. Subscribe the newsletter via E-Mail, Twitter or RSS to gradually catch up. Have a look at modern-⁠sql.com as well.

著者について

Markus Winandの写真

 Markus WinandSQLSQL Performance Explained  http://winand.at/  

彼の本

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

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

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

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

Connect with Markus Winand

Markus Winand MailinglistsSubscribe RSS feedMarkus Winand on LinkedInMarkus Winand on XINGMarkus Winand on TwitterMarkus Winand on Bluesky

Copyright 2015-2024 Hayato Matsuura, Markus Winand. All righs reserved.
法律上の通知 | お問い合わせ | 無保証 | 商標 | プライバシーとGDPR