MEDIA

メディア

  1. TOP
  2. メディア
  3. プログラミング
  4. MySQLのLIMIT句の使い方完全ガイド|実務で使える最適化・ページネーション・注意点解説

MySQLのLIMIT句の使い方完全ガイド|実務で使える最適化・ページネーション・注意点解説

「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

例:

  • page=3
  • per_page=20

👉 offset = 40

SQL例

SELECT id, name
FROM users
ORDER BY id DESC
LIMIT 20 OFFSET 40;

パフォーマンスの注意点

大きなOFFSETは遅い

LIMIT 20 OFFSET 100000;

👉 問題:

  • 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サービスを改善し続けるエンジニアを探しています。

もし、

「ただ動くコードではなく、意味のある設計をしたい」

そう感じているなら、一度カジュアルにお話ししませんか。

学んだSQLを、実務で使えるスキルにしたい方へ

本記事ではSQLの基本的な考え方や使い方を解説しましたが、
「実務で使えるレベルまで身につけたい」と感じた方も多いのではないでしょうか。

SQLは、文法を理解するだけでなく、

  • どんなデータ構造で使われるのか
  • どんなクエリが現場で求められるのか

を意識して学ぶことで、実践力が大きく変わります。

そうした「実務を見据えたSQL学習」を進めたい方には、
完全無料で学べるプログラミングスクール ZeroCode PLUS という選択肢もあります。

  • SQLを含むWeb・データベース系スキルを体系的に学べる
  • 未経験者でも実務を意識したカリキュラム
  • 受講料・教材費がかからない完全無料の学習環境
  • 完全オンラインでスキマ学習


ZeroCode PLUSについて詳しく見る

※学習内容や進め方を確認するだけでもOKです

Join us! 未経験からエンジニアに挑戦できる環境で自分の可能性を信じてみよう 採用ページを見る→

記事監修

ドライブライン編集部

[ この記事をシェアする ]

記事一覧へ戻る