カテゴリ: PostgreSQL 更新日: 2026/03/10

PostgreSQLのLIMIT・OFFSETとパフォーマンス問題を完全解説|初心者でもわかる安全な使い方

PostgreSQLのLIMIT/OFFSETとパフォーマンス問題
PostgreSQLのLIMIT/OFFSETとパフォーマンス問題

先生と生徒の会話形式で理解しよう

生徒

「PostgreSQLでLIMITやOFFSETを使うと便利なんですが、動きが遅くなることがあると聞きました。本当ですか?」

先生

「本当です。使い方によってはデータベースに大きな負担がかかることがあります」

生徒

「パソコンもSQLも初心者なんですが、ちゃんと理解できますか?」

先生

「大丈夫です。名簿を手でめくるイメージで説明します」

1. SQLとは何か?

1. SQLとは何か?
1. SQLとは何か?

SQLは、データベースに保存されている大量の情報を操作するための言葉です。データベースとは、名前や年齢、メールアドレスなどの情報を表の形で整理して保管する箱のような存在です。

SQLを使うことで、その表から必要な行だけを取り出したり、並び替えたり、表示する件数を制限したりできます。LIMITやOFFSETは、その中でも「どこから」「どれくらい表示するか」を決めるための命令です。

2. LIMITとOFFSETの基本的な役割

2. LIMITとOFFSETの基本的な役割
2. LIMITとOFFSETの基本的な役割

LIMITは「何件まで表示するか」を指定する命令です。一方OFFSETは「最初の何件を飛ばすか」を指定します。

たとえば、名簿を10人ずつ表示したいとき、1ページ目は最初の10人、2ページ目は最初の10人を飛ばして次の10人を表示します。この「飛ばす人数」がOFFSETです。

3. サンプルテーブルを確認しよう

3. サンプルテーブルを確認しよう
3. サンプルテーブルを確認しよう

ここではusersテーブルを使って説明します。まずはSQL実行前の状態を確認しましょう。


id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 25  | taro@example.com
2  | 佐藤花子   | 19  | hanako@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 高橋次郎   | 22  | jiro@example.com
5  | 伊藤美咲   | 28  | misaki@example.com
6  | 田中健太   | 35  | kenta@example.com
7  | 小林優子   | 41  | yuko@example.com
8  | 中村翔太   | 23  | shota@example.com

4. LIMIT・OFFSETの基本的な使い方

4. LIMIT・OFFSETの基本的な使い方
4. LIMIT・OFFSETの基本的な使い方

まずはシンプルなLIMITとOFFSETの例です。次のSQLは、最初の3件を飛ばして、4件目から2件だけ表示します。


SELECT *
FROM users
ORDER BY id
LIMIT 2
OFFSET 3;

実行結果


id | name       | age | email
---+------------+-----+-------------------
4  | 高橋次郎   | 22  | jiro@example.com
5  | 伊藤美咲   | 28  | misaki@example.com

5. OFFSETがパフォーマンスに影響する理由

5. OFFSETがパフォーマンスに影響する理由
5. OFFSETがパフォーマンスに影響する理由

OFFSETは見た目以上にデータベースへ負担をかけます。理由は、OFFSETで指定した件数分のデータも、実際には内部で順番に読み取っているからです。

これは、本の最後のページを見るために、最初のページから一枚ずつめくっている状態に似ています。表示はされませんが、処理としてはすべて通過しています。

OFFSETの値が大きくなるほど、読み飛ばすデータが増え、処理時間が長くなります。

6. 大きなOFFSETを使った例

6. 大きなOFFSETを使った例
6. 大きなOFFSETを使った例

次のようなSQLは、データが多い環境では注意が必要です。


SELECT *
FROM users
ORDER BY id
LIMIT 10
OFFSET 10000;

この場合、10000件分のデータを読み飛ばしたあとに10件を取得します。データが増えるほど処理は重くなり、画面表示が遅くなる原因になります。

7. ORDER BYがない場合の危険性

7. ORDER BYがない場合の危険性
7. ORDER BYがない場合の危険性

LIMITやOFFSETを使うときにORDER BYを指定しないと、表示順が安定しません。データベースは毎回同じ順番で返す保証がないためです。


SELECT *
FROM users
LIMIT 3
OFFSET 2;

このSQLは実行するたびに、違う結果になる可能性があります。必ず並び順を決めることが大切です。

8. パフォーマンスを意識した考え方

8. パフォーマンスを意識した考え方
8. パフォーマンスを意識した考え方

初心者のうちは、LIMITとOFFSETは「ページ分割のための便利な道具」として使って問題ありません。ただし、データが増えると負荷が高くなることを覚えておくことが重要です。

「後ろのページほど遅くなる」という特徴がある、という点だけでも理解しておくと、トラブルを避けやすくなります。

カテゴリの一覧へ
新着記事
New1
PostgreSQL
PostgreSQLのLIMIT・OFFSETとパフォーマンス問題を完全解説|初心者でもわかる安全な使い方
New2
MySQL
MySQLのUPDATE文でデータを更新する基本を徹底解説|SQL初心者でもわかるデータベース更新入門
New3
PostgreSQL
PostgreSQLのOFFSET完全入門|並び替えと組み合わせてデータをスキップする方法を初心者向けに解説
New4
MySQL
MySQLで複数行INSERTを行う方法と注意点を徹底解説|SQL基礎から学ぶデータベース入門
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのDISTINCT完全ガイド|SQLで重複データを除外する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLのLEFT JOIN完全入門!不足データを補いながらテーブル結合する仕組みをやさしく解説
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLスキーマ設計のベストプラクティス完全ガイド|初心者でもわかるデータベース整理術
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLのpublicスキーマの役割と扱い方
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎