MySQL limit offset

とても基本的なことだが、MySQLのSELECT文にて、OFFSETが該当件数以上の値となっている場合、結果が0行となる。
(想定するレコードを取得できない)


以下のようなテーブルに対して、SQLを発行する。

|id|name|
|1|いちろう|
|2|じろう|
|3|さぶろう|
|4|しろう|
|5|ごろう|

OFFSET 0=先頭から検索する。

SELECT * FROM USER LIMIT 5 OFFSET 0;
|id|name|
|1|いちろう|
|2|じろう|
|3|さぶろう|
|4|しろう|
|5|ごろう|

OFFSET 5=6行目から検索する。

SELECT * FROM USER LIMIT 5 OFFSET 5;
Empty set (0.00 sec)

当然、レコードは5件しかないため、6行目からの検索結果は”0件”となる。

また、offsetは2段階の処理となっており、2つ目の切り捨て負荷が無視できない場合がある。

  1. 条件に合致する全レコードを取得
  2. 取得レコードからオフセット文のレコードを捨てる