3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
Cursor-based Pagination 分頁(Pagination) 是在製作 Dashboard 過程中一定會需要的功能。 Traditional Approach 在傳統方法中,大多數開發者都會習慣使用 OFFSET 搭配 LIMIT 去處理分頁。 例如: SELECT album_id, album_name, album_company FROM album ORDER BY album_id LIMIT 10 OFFSET 60; +----------+---------------------------------------------------------+---------------+ | album_id | album_name | album_company | +----------+---------------------------------------------------------+---------------+ | 292 | 同名專輯 | 環球 | | 297 | 正東 10 X 10 我至愛唱片 - 許志安『爛泥』 | 環球 | | 299 | 黑白 | 環球 | | 301 | 默契 | 環球 | | 302 | 忘了 | 華納 | | 305 | Belong To Myself | 環球 | | 307 | 快樂為主 | 環球 | | 310 | KELLY CHEN BPM DANCE COLLECTION VOLUME 4 | 環球 | | 311 | 就是陳潔儀新加坡演唱會 | 海蝶 | | 318 | 真經典 - 黎明 | 環球 | +----------+---------------------------------------------------------+---------------+ 但其實使用 OFFSET 和 LIMIT 的話,Database 的運作是從頭到尾的走訪,也就是所謂的 Scan Table。只要進到很末端的頁數,就會讓 Database 非常忙碌、緩慢,甚至可能會有倒站的風險。 比方說,如果要從第 10000000 往下找 10 筆,就必須走訪 10000010 筆資料。 SELECT album_id, album_name, album_company FROM album ORDER BY album_id LIMIT 10 OFFSET 10000000; 10 rows in set (14.72 sec) Cursor-based Pagination Cursor-based Pagination 是透過明確的起始點去定位,因此需要有一些先決條件: Cursor 必須基於一個 有 index 且 有序 的欄位,例如 id 或 created_at 沒有頁數概念 拿 album_id 當定位點為例,在前端的每一頁,都必須紀錄該頁的最後一個 album_id 。 所以要從第 10000000 往下找 10 筆就變成: SELECT album_id, album_name, album_company FROM album WHERE album_id > 10000000 ORDER BY album_id LIMIT 10; 10 rows in set (0.00 sec) 效能的差異非常顯著。 Categories: Database Tags: Database 分類 Android AngularJS API Blueprint Chrome Database MySQL DataStructure Docker Editor Vim Firefox Git GitLab Google API Hadoop HTTP Language Go Java JavaScript jQuery jQueryChart Node.js Vue Vue-CLI PHP Laravel Lumen ZendFramework Python Mac Network Cisco DLink Juniper Oauth Server Apache Share Unix FreeBSD Linux WebDesign Bootstrap CSS HTML Wordpress Search 搜尋關鍵字:

本文由blogjohnsonluorg提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦