回答編集履歴

8

a

2016/04/14 10:30

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -28,4 +28,4 @@
28
28
 
29
29
  **「ページ番号」を受け取るのではなく,「左端または右端のID」を受け取るようにしましょう.**
30
30
 
31
- (この記事ではサンプル紹介していませんが,今回はidが連続なのでページ番号からBETWEENの両端のIDを得ることも一応可能です.WHERE句による絞り込みが一切使えなくなる縛りがつき,拡張性が大きく落ちるのであまりおすすめはできませんが…)
31
+ (この記事ではサンプル紹介していませんが,今回はidが連続なのでページ番号からBETWEENの両端のidを得ることも一応可能です.WHERE句による絞り込みが一切使えなくなる縛りがつき,拡張性が大きく落ちるのであまりおすすめはできませんが…)

7

a

2016/04/14 10:30

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -28,4 +28,4 @@
28
28
 
29
29
  **「ページ番号」を受け取るのではなく,「左端または右端のID」を受け取るようにしましょう.**
30
30
 
31
- (ちょっと工夫すればページ番号実現はきますが,メリットがあるかどうか微妙なところ)
31
+ (この記事ではサンプル紹介していませんが,今回はidが連続なのでページ番号からBETWEENの両端のIDを得ること一応可能です.WHERE句による絞り込み一切使えなくなる縛りがつき拡張性大きく落ちるのでまりおすすめはできませんが…)

6

a

2016/04/14 10:29

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -27,3 +27,5 @@
27
27
 
28
28
 
29
29
  **「ページ番号」を受け取るのではなく,「左端または右端のID」を受け取るようにしましょう.**
30
+
31
+ (ちょっと工夫すればページ番号でも実現はできますが,メリットがあるかどうかは微妙なところです)

5

a

2016/04/14 10:15

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -8,7 +8,17 @@
8
8
 
9
9
 
10
10
 
11
- これらに該当する場合を除き,**LIMIT+OFFSETは速度低下を招く**ので,進んで使うべきものではありません.LIMITは使いますが,オフセットの調整は主キーてBETWEENで範囲を限定するだけのほうが望ましいでしょう.後者の方が計算コストが `n / log_2(n)` 倍軽く,これはオフセットnが大きくなるにつれて差が顕著になります.全体が100万件で最終ページを取得しようとした場合,約50000倍の速度差があります.
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

2016/04/14 08:54

投稿

mpyw
mpyw

スコア5223

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

2016/04/14 08:37

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -3,6 +3,8 @@
3
3
  - 絞り込み後の全体件数を取得したい
4
4
 
5
5
  - 全体レコード数が最大で30000件程度であって,速度をそれほど気にする必要がない
6
+
7
+ - 全体件数は多いが,それほど奥までページネーションを行うことがない
6
8
 
7
9
 
8
10
 

2

a

2016/04/14 08:34

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- これらに該当する場合を除き,**LIMIT+OFFSETは速度低下を招くので使うべきではありません.**LIMITは使いますが,オフセットの調整は主キーに対してBETWEENで範囲を限定するだけのほうが望ましいでしょう.後者の方が計算コストが `n / log_2(n)` 倍軽く,これはオフセットnが大きくなるにつれて差が顕著になります.全体が100万件で最終ページを取得しようとした場合,約50000倍の速度差があります.
9
+ これらに該当する場合を除き,**LIMIT+OFFSETは速度低下を招く**ので,進んで使うべきものではありません.LIMITは使いますが,オフセットの調整は主キーに対してBETWEENで範囲を限定するだけのほうが望ましいでしょう.後者の方が計算コストが `n / log_2(n)` 倍軽く,これはオフセットnが大きくなるにつれて差が顕著になります.全体が100万件で最終ページを取得しようとした場合,約50000倍の速度差があります.
10
10
 
11
11
 
12
12
 

1

a

2016/04/14 08:32

投稿

mpyw
mpyw

スコア5223

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