MySQLのLIKE演算子とは?文字列検索でつまずく悩みを解決する基本知識
CONTENTS
MySQLでデータ検索を行っていると、
「特定のキーワードを含むデータだけを抽出したい」
「前方一致・部分一致・後方一致の違いが曖昧」
「LIKEを使うと遅くなると聞いたけど、何が原因?」
といった疑問や不安を感じたことはないでしょうか。
LIKE演算子は非常に便利な一方で、使い方を誤るとパフォーマンス劣化を招きやすいSQLでもあります。
本記事では、MySQLのLIKE演算子について 基礎から実務レベルまでを網羅的に解説 します。
この記事を読むことで、以下が理解できるようになります。
- LIKE演算子の基本構文と仕組み
- 前方一致・後方一致・部分一致の正しい使い分け
- NOT LIKEやエスケープ処理の実践的な使い方
- インデックスとパフォーマンスの関係
- 実務でよくある検索シナリオと最適なSQL設計
「とりあえずLIKEを使っている」状態から一歩進み、意図を持って使い分けられるエンジニアになるための完全ガイドです。
LIKE演算子の基本構文と特徴
LIKE演算子とは何か
LIKE演算子は、文字列に対してパターンマッチング検索を行うための演算子です。
完全一致を行う「=`演算子とは異なり、文字列の一部が一致していれば条件を満たします。
基本構文は以下のとおりです。
SELECT カラム名
FROM テーブル名
WHERE カラム名 LIKE '検索パターン';
ユーザー名検索、商品名検索、ログの文字列検索など、あいまい検索が求められる場面で頻繁に利用されます。
大文字・小文字の扱いに注意
MySQLでは、照合順序(collation)によって大文字・小文字の区別が決まります。
多くの環境ではデフォルトで区別されません。
区別したい場合は BINARY を使用します。
SELECT *
FROM users
WHERE BINARY name LIKE 'Admin%';
パターンマッチングに使う「%」と「_」
%(パーセント)の意味
- 任意の文字列(0文字以上)にマッチ
WHERE name LIKE 'A%';
→ Aで始まるすべての文字列
_(アンダースコア)の意味
- 任意の1文字にマッチ
WHERE code LIKE 'A_';
→ A+1文字の2文字コード(例:A1、AB)
組み合わせによる柔軟な検索
WHERE name LIKE '_田%';
→ 2文字目が「田」で始まるすべての文字列
前方一致検索の方法と注意点
前方一致とは
WHERE カラム LIKE '検索文字列%';
指定した文字列で始まるデータを検索します。
代表的な用途
- 社員番号
- 商品コード
- メールアドレスのドメイン前半
前方一致はインデックスが効きやすい
LIKE検索の中でも、前方一致はインデックスを利用できる可能性が高いのが特徴です。
EXPLAIN SELECT * FROM users WHERE email LIKE 'info%';
実行計画を確認し、key が使われているかを必ず確認しましょう。
参考(公式):https://dev.mysql.com/doc/refman/8.0/en/explain.html
後方一致検索の方法と注意点
後方一致とは
WHERE カラム LIKE '%検索文字列';
指定した文字列で終わるデータを検索します。
インデックスが使われない点に注意
先頭が % の場合、ほぼ確実にインデックスが無効になります。
大量データではフルテーブルスキャンとなり、性能問題の原因になります。
対策例
- 検索対象を正規化して別カラムに持つ
- 検索要件自体を見直す
部分一致検索で柔軟に情報を抽出する
部分一致検索とは
WHERE カラム LIKE '%検索文字列%';
文字列のどこかに含まれていればOKという最も柔軟な検索です。
柔軟だが最も重い検索
- インデックスは基本的に使われない
- 大規模テーブルでは要注意
全文検索が必要な場合は、以下も検討しましょう。
- MySQL FULLTEXT INDEX
https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html - 外部全文検索エンジン(Elasticsearchなど)
完全一致(=)との違いと使い分け
= 演算子の特徴
WHERE id = 100;
- 高速
- インデックスが確実に利用される
- 厳密な一致検索向け
LIKEとの使い分け指針
| 検索目的 | 推奨 |
|---|---|
| 主キー・コード検索 | = |
| 前方一致 | LIKE 'xxx%' |
| あいまい検索 | LIKE '%xxx%' |
NOT LIKE演算子で条件を否定する
NOT LIKEの基本構文
WHERE カラム NOT LIKE '%test%';
指定したパターンを含まないデータを抽出します。
複数条件との組み合わせ
WHERE name NOT LIKE 'A%'
AND status = 'active';
不要データを除外するフィルタリングに非常に有効です。
特殊文字(%・_)をエスケープする方法
なぜエスケープが必要か
% や _ はワイルドカードとして解釈されるため、
文字として検索したい場合はエスケープが必須です。
バックスラッシュでのエスケープ
WHERE filename LIKE '%\_%' ESCAPE '\';
ESCAPE句で任意文字を指定
WHERE col LIKE '%!%%' ESCAPE '!';
公式参考:https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html
LIKE演算子のパフォーマンスとインデックス最適化
パフォーマンス劣化の主な原因
- 先頭
% - 部分一致検索の多用
- 大量データへの無計画なLIKE
実務での対策ポイント
- 前方一致を優先
- EXPLAINで必ず実行計画確認
- 検索専用カラムの設計
- FULLTEXT INDEXの検討
実務でよくあるLIKE検索の具体例
ユーザー名検索
SELECT *
FROM users
WHERE name LIKE '%山田%';
→ 苗字・名前どちらにも対応できる柔軟検索
商品名のブランド検索
SELECT *
FROM products
WHERE product_name LIKE 'ABC%';
→ インデックスを活かしやすい設計
まとめ|LIKE演算子を理解すればSQLの質が変わる
本記事では、MySQLのLIKE演算子について以下を解説しました。
- LIKE演算子の基本構文と仕組み
- 前方一致・後方一致・部分一致の違い
- NOT LIKE・エスケープ処理の実践方法
- インデックスとパフォーマンスへの影響
- 実務での具体的な活用シーン
LIKE演算子は便利な反面、設計思想が問われるSQLです。
検索要件・データ量・インデックス設計を意識することで、
「動くSQL」から「強いSQL」へと進化します。
技術を深く理解したエンジニアとして、次のステップへ
ここまで読み進められたあなたは、
データベース設計やSQLパフォーマンスに本気で向き合える素養をお持ちです。
私たちは、
- MySQLをはじめとしたRDBの設計・運用
- 実務で通用するSQLチューニング
- 技術を大切にする開発文化
を重視するエンジニアチームです。
「もっと技術を磨きたい」
「検索やDB設計に強いエンジニアとして成長したい」
そんな想いをお持ちでしたら、ぜひ一度、私たちの採用情報をご覧ください。
知識を実務に活かし、仲間とともに成長できる環境をご用意しています。
学んだSQLを、実務で使えるスキルにしたい方へ
本記事ではSQLの基本的な考え方や使い方を解説しましたが、
「実務で使えるレベルまで身につけたい」と感じた方も多いのではないでしょうか。
SQLは、文法を理解するだけでなく、
- どんなデータ構造で使われるのか
- どんなクエリが現場で求められるのか
を意識して学ぶことで、実践力が大きく変わります。
そうした「実務を見据えたSQL学習」を進めたい方には、
完全無料で学べるプログラミングスクール ZeroCode という選択肢もあります。
- SQLを含むWeb・データベース系スキルを体系的に学べる
- 未経験者でも実務を意識したカリキュラム
- 受講料・教材費がかからない完全無料の学習環境
※学習内容や進め方を確認するだけでもOKです