0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQL WHERE文の順序によるパフォーマンス差

Posted at

SQLの WHERE 文に条件を複数書く場合順番によって結果は変わらずとも、パフォーマンスには影響がある場合があります

1. Index

  • まずはINDEXが貼られている列の条件で絞り込むことによってレコード数を減らします。

INDEXとは:特定の値を素早く検索できるようになる仕組みのこと。全件を順番に見なくても **インデックスを使って一発で行を特定でき、**ほとんどのどんな列にも作れます。

  • IDやPK は自動的にインデックスが作られることが多い
  • 検索に頻繁に使う列はインデックスをつけると良いが、作りすぎると逆に遅くなることがある。また、部分一致検索や関数を使った検索では、インデックスが効きにくい場合がある。

2. 不等号での比較(等価比較(=での比較)・範囲条件(>, <, BETWEEN))、NULLチェック

  • IS NULL・IS NOT NULLによる絞り込みと不等号は順番を変更することによるパフォーマンスの影響はありません。

3. LIKEや関数使用など、インデックスが効きにくい条件

  • インデックスが効かない関数とは:列に対して変換をかける関数
    • 例:
      • LOWER / UPPER
      • TRIM
      • SUBSTRING
      • YEAR / MONTH
      • ABS
      • ROUND
      • CAST

パフォーマンスについてあまり意識していませんでしたが、インデックスが効く列の条件を先に書くと理解しやすく、場合によってはパフォーマンス向上につながることを知りました。
結果は変わらなくても、順序や記載方法などの小さな違いでパフォーマンスに差が出ることがあると考えると、SQLを書く際に意識すべきことが多いと感じました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?