「MySQLでデータを一部だけ取得したい」「ページネーションを実装したい」「ランキングや最新データを効率よく取得したい」
このような悩みを持つエンジニアは多いのではないでしょうか。
実はこれらはすべて、LIMIT句を正しく理解し、適切に使いこなすことで解決できます。
しかし、LIMITはシンプルな構文ながらも、
- ORDER BYとの関係
- OFFSETのパフォーマンス問題
- ページネーション設計の落とし穴
など、実務でつまずきやすいポイントが多いのも事実です。
この記事では、以下を網羅的に解説します。
- LIMITの基本構文と考え方
- ORDER BY・WHEREとの正しい組み合わせ
- 実務で使う具体パターン(ランキング・最新・ページング)
- パフォーマンスを意識した設計
- よくあるミスと回避方法
さらに、現場レベルで使える設計思想まで踏み込みます。
LIMIT句とは?基本概念を理解する
LIMITの役割
LIMITは、SELECT文で取得する行数を制限するための構文です。
SELECT * FROM users LIMIT 5;
この例では、usersテーブルから最大5件のみ取得します。
なぜLIMITが重要なのか
LIMITは単なる「件数制限」ではなく、以下の観点で非常に重要です。
- DB負荷軽減(不要な大量データ取得を防ぐ)
- ネットワーク転送量削減
- アプリ側のメモリ消費削減
- UX改善(高速レスポンス)
特に、管理画面・API・検索機能では必須スキルです。
LIMITの基本構文
① 件数のみ指定
SELECT * FROM users LIMIT 5;
- 先頭から5件取得
- 内部的には
LIMIT 0, 5 と同じ
② offset付き
SELECT * FROM users LIMIT 5;
- 10件スキップして5件取得
- → 11件目〜15件目
③ OFFSET構文
SELECT * FROM users LIMIT 5;
offsetの考え方(重要)
offsetは「何件スキップするか」
- offset = 0 → 先頭から
- offset = 1 → 2件目から
👉 0始まりであることが最大のポイント
ORDER BYとLIMITの正しい使い方
なぜORDER BYが必要なのか
LIMIT単体では、どの順序のデータか保証されません。
SELECT * FROM users LIMIT 5;
これは「適当な10件」です。
正しい書き方(ランキング)
SELECT id, name, score
FROM users
ORDER BY score DESC
LIMIT 10;
👉 スコア上位10件
正しい書き方(最新データ)
SELECT id, title, created_at
FROM posts
ORDER BY created_at DESC
LIMIT 20;
タイブレーク(超重要)
ORDER BY created_at DESC, id DESC;
理由:
- 同じ日時があると順序が不安定
- ページングで重複・抜けが発生する
WHEREとLIMITの組み合わせ
条件絞り込み+件数制限
SELECT *
FROM users
WHERE status = 'active'
LIMIT 10;
👉 実務では最もよく使う形
検索APIの基本形
SELECT id, name
FROM users
WHERE status = 'active'
ORDER BY id DESC
LIMIT :limit OFFSET :offset;
👉 Webアプリの基本テンプレ
よくある用途パターン
① データ確認(デバッグ)
SELECT * FROM logs LIMIT 20;
👉 開発・障害調査で必須
② ランキング表示
SELECT product_id, sales
FROM sales
ORDER BY sales DESC
LIMIT 10;
③ 最新一覧
SELECT *
FROM posts
ORDER BY created_at DESC, id DESC
LIMIT 20;
ページネーションの実装方法
offset計算式
offset = (page - 1) * per_page
例:
👉 offset = 40
SQL例
SELECT id, name
FROM users
ORDER BY id DESC
LIMIT 20 OFFSET 40;
パフォーマンスの注意点
大きなOFFSETは遅い
👉 問題:
- DBは10万件スキップする必要がある
- 非常に重くなる
解決策:キーセットページネーション
SELECT *
FROM users
WHERE id > :last_id
ORDER BY id
LIMIT 20;
👉 メリット:
よくある失敗と対策
① ORDER BYなし
❌ 悪い例
SELECT * FROM users LIMIT 10;
👉 結果が不安定
② タイブレークなし
❌
ORDER BY created_at DESC;
👉 重複・抜け発生
③ SELECT *
❌
SELECT * FROM users LIMIT 100;
👉 無駄なデータ取得
改善
SELECT id, name FROM users LIMIT 100;
実務での設計指針
基本ルール
- LIMITは必ずORDER BYとセット
- OFFSETは最小限に
- タイブレークを必ず入れる
- 必要なカラムだけ取得
SQL設計テンプレ
SELECT 必要カラム
FROM テーブル
WHERE 条件
ORDER BY 主キー DESC, 補助キー DESC
LIMIT :limit OFFSET :offset;
信頼性の高い参考情報
👉 特に「OFFSETの問題」は実務で必読です。
まとめ
LIMIT句はシンプルながら、実務では以下が重要です。
- LIMITは件数制御の基本機能
- ORDER BYと組み合わせて意味を持つ
- OFFSETはパフォーマンスに影響する
- タイブレークで順序を安定させる
- ページネーション設計が品質を左右する
これらを理解することで、
- 高速で安定したAPI
- UXの良い一覧画面
- スケーラブルなDB設計
が実現できます。
次のアクション
ここまで読んだ方は、
- SQLの基礎を超えて「設計」を理解したい
- パフォーマンスを意識した実装に関わりたい
- Webサービスの裏側を支える技術に興味がある
そんなフェーズにいるはずです。
私たちのチームでは、こうした実務レベルの設計力を大切にしながら、Webサービスを改善し続けるエンジニアを探しています。
もし、
「ただ動くコードではなく、意味のある設計をしたい」
そう感じているなら、一度カジュアルにお話ししませんか。