by Hayato Matsuura

where句


前章では、インデックスの構造を解説し、インデックスを使った検索の パフォーマンスが悪くなる原因について説明しました。この章以降、SQL文の中で、こういった問題を局所化したり、回避したりする方法について学んでいきます。 それでは、where句から始めていきましょう。

whereは、SQL文の検索条件を定義するための句であり、 データを素早く見つけるという、インデックスの中心的な機能の1つに分類されます。where句はパフォーマンスに非常に大きな影響を与えるものですが、 深く考えずに使われ、データベースが大量のスキャンをしてしまう原因にもなるのもよくあることです。つまり、クエリを遅くする一番の原因は、出来の悪い 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. 数式 - データベースは 方程式を解けない

前へ次へ

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

彼の本

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

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

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

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

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