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を書く際に意識すべきことが多いと感じました。