Phoenix 九 分頁查詢

2021-09-20 11:54:06 字數 3220 閱讀 6420

所謂分頁查詢就是從符合條件的起始記錄,往後遍歷「頁大小」的行。資料庫的分頁是在server端完成的,避免客戶端一次性查詢到大量的資料,讓查詢資料資料分段展示在客戶端。對於phoenix的分頁查詢,怎麼使用?效能怎麼樣?需要注意什麼?將會在文章中通過示例和資料說明。

[ limit  ]

[ offset start [ row | rows ] ]

[ fetch [ count ] only ]

limit或者fetch在order by子句後轉化為為top-n的查詢,其中offset子句表示從開始的位置跳過多少行開始掃瞄。

對於以下的offsset使用示例, 我們可發現當offset的值為0時,查詢結果從第一行記錄開始掃瞄limit指定的行數,當offset值為1時查詢結果從第二行記錄開始開始掃瞄limit指定的行數...

0: jdbc:phoenix:localhost> select ss_customer_sk  from store_sales where ss_item_sk < 3600order by ss_item_sk 

limit 6;

+-----------------+

| ss_customer_sk |

+-----------------+

| 109734 |

| null |

| 168740 |

| 344372 |

| 249078 |

| 241017 |

+-----------------+

6 rows selected (0.025 seconds)

0: jdbc:phoenix:localhost> select ss_customer_sk from store_sales where ss_item_sk < 3600 order by ss_item_sk

limit 3 offset 0;

+-----------------+

| ss_customer_sk |

+-----------------+

| 109734 |

| null |

| 168740 |

+-----------------+

3 rows selected (0.034 seconds)

0: jdbc:phoenix:localhost> select ss_customer_sk from store_sales where ss_item_sk < 3600 order by ss_item_sk

limit 3 offset 1;

+-----------------+

| ss_customer_sk |

+-----------------+

| null |

| 168740 |

| 344372 |

+-----------------+

3 rows selected (0.026 seconds)

0: jdbc:phoenix:localhost> select ss_customer_sk from store_sales where ss_item_sk < 3600 order by ss_item_sk

limit 3 offset 2;

+-----------------+

| ss_customer_sk |

+-----------------+

| 168740 |

| 344372 |

| 249078 |

+-----------------+

3 rows selected (0.017 seconds)

0: jdbc:phoenix:localhost> select ss_customer_sk from store_sales where ss_item_sk < 3600 order by ss_item_sk

limit 3 offset 3;

+-----------------+

| ss_customer_sk |

+-----------------+

| 344372 |

| 249078 |

| 241017 |

+-----------------+

3 rows selected (0.024 seconds)

select * from test limit 1000;

select * from test limit 1000 offset 100;

select * from test fetch first 100 rows only;

我們對如下sql的limit子句進行效能得到以下結論。

select ss_customer_sk  from store_sales

where ss_item_sk < 3600

order by ss_item_sk

limit offset

結論1:當limit的值一定時,隨著offset n的值越大,查詢性基本會線性下降。

結論2:當offset的值一定時,隨著limit的值越大,查詢效能逐步下降。當limit的值相差乙個數量級時,查詢效能也會有幾十倍的差距。

大多數場景中分頁查詢都是和order by子句一起使用的, 在這裡需要注意的是,order by的排序字段最好是主鍵,否則查詢效能會比較差。(這部分最好是在做業務層設計時就能考慮到)分頁查詢需要根據使用者的實際需求來設計,在現實產品中,一般很少有上萬行每頁的需求,頁數太大是不合理的,同時頁數太多也是不合理的。度量是否合理,仍需要根據實際需求出發。

九 分頁查詢

select 投影列 from 表名 where 條件 order by limit 開始位置,查詢數量。示例 查詢雇員表中所有資料按 id 排序,實現分頁查詢,每次返回兩條結果。select from employees order by employees id limit 0,2 select...

Oracle 學習筆記(九)分頁查詢

上次筆記學到分頁查詢的三種方式 rowid 分析函式和 rownum,這次筆記重點學 rownum 方式的分頁查詢。1.查詢 emp 表為例 select from emp 2.顯示 rownum 由系統自己分配 select e.rownum rn from select from emp e r...

Phoenix實現分頁查詢

1 利用offset語法,官網的語法 elect from test limit 1000 select from test limit 1000 offset 100 2 公式如下 select from test limit pagesize offset pagenum 1 pagesize ...