回答編集履歴
8
a
test
CHANGED
@@ -28,4 +28,4 @@
|
|
28
28
|
|
29
29
|
**「ページ番号」を受け取るのではなく,「左端または右端のID」を受け取るようにしましょう.**
|
30
30
|
|
31
|
-
(この記事ではサンプル紹介していませんが,今回はidが連続なのでページ番号からBETWEENの両端の
|
31
|
+
(この記事ではサンプル紹介していませんが,今回はidが連続なのでページ番号からBETWEENの両端のidを得ることも一応可能です.WHERE句による絞り込みが一切使えなくなる縛りがつき,拡張性が大きく落ちるのであまりおすすめはできませんが…)
|
7
a
test
CHANGED
@@ -28,4 +28,4 @@
|
|
28
28
|
|
29
29
|
**「ページ番号」を受け取るのではなく,「左端または右端のID」を受け取るようにしましょう.**
|
30
30
|
|
31
|
-
(
|
31
|
+
(この記事ではサンプル紹介していませんが,今回はidが連続なのでページ番号からBETWEENの両端のIDを得ることも一応可能です.WHERE句による絞り込みが一切使えなくなる縛りがつき,拡張性が大きく落ちるのであまりおすすめはできませんが…)
|
6
a
test
CHANGED
@@ -27,3 +27,5 @@
|
|
27
27
|
|
28
28
|
|
29
29
|
**「ページ番号」を受け取るのではなく,「左端または右端のID」を受け取るようにしましょう.**
|
30
|
+
|
31
|
+
(ちょっと工夫すればページ番号でも実現はできますが,メリットがあるかどうかは微妙なところです)
|
5
a
test
CHANGED
@@ -8,7 +8,17 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
これらに該当する場合を除き,**LIMIT+OFFSETは速度低下を招く**ので,進んで使うべきものではありません.
|
11
|
+
これらに該当する場合を除き,**LIMIT+OFFSETは速度低下を招く**ので,進んで使うべきものではありません.この調整は以下のどちらかにしたほうが望ましいです.
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
- 開始IDと終了IDを指定する
|
16
|
+
|
17
|
+
- 開始IDとLIMITを指定する
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
このようにした方が計算コストが `n / log_2(n)` 倍軽く,これはオフセットnが大きくなるにつれて差が顕著になります.全体が100万件で最終ページを取得しようとした場合,理論上は約50000倍の速度差があります.
|
12
22
|
|
13
23
|
|
14
24
|
|
4
a
test
CHANGED
@@ -13,3 +13,7 @@
|
|
13
13
|
|
14
14
|
|
15
15
|
[OFFSETを使わない高速なページネーションの実現](http://qiita.com/mpyw/items/07c03600c2e38e91415e)
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
**「ページ番号」を受け取るのではなく,「左端または右端のID」を受け取るようにしましょう.**
|
3
a
test
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
- 絞り込み後の全体件数を取得したい
|
4
4
|
|
5
5
|
- 全体レコード数が最大で30000件程度であって,速度をそれほど気にする必要がない
|
6
|
+
|
7
|
+
- 全体件数は多いが,それほど奥までページネーションを行うことがない
|
6
8
|
|
7
9
|
|
8
10
|
|
2
a
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
これらに該当する場合を除き,**LIMIT+OFFSETは速度低下を招くので使うべきではありません.
|
9
|
+
これらに該当する場合を除き,**LIMIT+OFFSETは速度低下を招く**ので,進んで使うべきものではありません.LIMITは使いますが,オフセットの調整は主キーに対してBETWEENで範囲を限定するだけのほうが望ましいでしょう.後者の方が計算コストが `n / log_2(n)` 倍軽く,これはオフセットnが大きくなるにつれて差が顕著になります.全体が100万件で最終ページを取得しようとした場合,約50000倍の速度差があります.
|
10
10
|
|
11
11
|
|
12
12
|
|
1
a
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
これらに該当する場合を除き,**LIMIT+OFFSETは速度低下を招くので使うべきではありません.**LIMITは使いますが,オフセットの調整は主キーに対してBETWEENで範囲を限定するだけのほうが望ましいでしょう.後者の方が計算コストが `n / log(n)` 倍軽く,これはオフセットnが大きくなるにつれて差が顕著になります.
|
9
|
+
これらに該当する場合を除き,**LIMIT+OFFSETは速度低下を招くので使うべきではありません.**LIMITは使いますが,オフセットの調整は主キーに対してBETWEENで範囲を限定するだけのほうが望ましいでしょう.後者の方が計算コストが `n / log_2(n)` 倍軽く,これはオフセットnが大きくなるにつれて差が顕著になります.全体が100万件で最終ページを取得しようとした場合,約50000倍の速度差があります.
|
10
10
|
|
11
11
|
|
12
12
|
|