0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLパフォーマンス詳解 7章:部分結果_2.次ページの取得

0
Posted at

7章:部分結果

2.次ページの取得

結論

ページングは2種類ある。

OFFSETは簡単だが、スケールしない。
シーク法は少し難しいが高速で安定。

➡ 実務ではシーク法が本質的に優れている。


ページングの2つの方法

ページングには2つある

OFFSET方式
行番号でスキップする。

シーク法
前ページの最後の値を使って続きを取得する。


OFFSETの問題

必要な位置迄、毎回先頭から全部読む必要があるため、
ページが進むほど遅くなる。

➡ OFFSETはシンプルだが本質的に遅い。
さらに、
データが追加されると、ページの中身がズレる。


シーク法の仕組み

シーク法は、「前ページの最後」から続きを取る。

例(降順):
WHERE sale_date < ? ORDER BY sale_date DESC FETCH FIRST 10

これにより、

  • 先頭から読まない
  • インデックスが使える

➡ 必要な位置から直接取得できる。


なぜシーク法は早いのか

OFFSET
全部読んで捨てる

シーク法
必要な場所から読む

➡ スキャンの仕方が違う


シーク法の注意点

ORDER BYが曖昧だと壊れる。

同じ値があると

  • 重複
  • 取りこぼし

が発生する。


解決方法

ORDER BYを一意にする。
例:
ORDER BY sale_date, sale_id

➡ 一意キーを追加する


まとめ

  • OFFSETは簡単だが遅くて不安定
  • シーク法はインデックスを活かせる
  • ORDER BYは必ず一意にする

ポイント:ページングもインデックスで解決する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?