第05回: SELECTとWHERE条件の使い方 — 「欲しいデータだけ」を正確に取り出す

章: 第1章: 基礎と環境構築

取得条件が曖昧だと、何が起きるのか?

SELECT * で全件取得してアプリ側でフィルタリング——これは開発初期によくある実装です。しかしデータが10万件・100万件と増えるにつれ、レスポンスが劣化し、不要なデータ転送でメモリも圧迫されます。

SELECTとWHEREを正しく使いこなすことは、パフォーマンスと正確性の両方に直結します。 取得する列と行を絞り込む習慣を、最初から身につけましょう。

よくある落とし穴:AND/OR の優先順位

WHERE A OR B AND CWHERE A OR (B AND C) と解釈されます。意図と異なる結果が出ることがあるため、複数条件は必ず括弧で明示します。

WHERE 条件の書き方:良い例・悪い例

ケース 悪い例 良い例
部分一致 WHERE name = '%Yu%'(型間違い) WHERE name LIKE 'Yu%'
複数条件 WHERE a = 1 OR b = 2 AND c = 3 WHERE a = 1 OR (b = 2 AND c = 3)
NULL比較 WHERE deleted_at = NULL WHERE deleted_at IS NULL
列取得 SELECT *(全列取得) SELECT id, name, email(必要列だけ)

チェックポイント: LIKE '%keyword%' の前方ワイルドカードはインデックスが効きません。検索性能が重要な場合は、前方一致 LIKE 'keyword%' か全文検索(FULLTEXT)を検討しましょう。

実際のコードのサンプル


SELECT id, name, email
FROM users
WHERE name LIKE 'Yu%'
  AND created_at >= '2026-01-01';

まとめ & 次のステップ

  • SELECT * は避け、必要な列だけを明示して取得する
  • AND/OR の複合条件は括弧で意図を明示する
  • NULLとの比較は = NULL ではなく IS NULL / IS NOT NULL を使う
  • LIKE 'keyword%'(前方一致)はインデックスが効くが、LIKE '%keyword%'(前方ワイルドカード)は効かない

次回は 「ORDER BYとLIMITで一覧最適化」 を学びます。表示順と件数制御を正しく設計して、一覧APIの品質を上げる方法を確認します。

Related Articles