日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 高效分页查询_PostgreSQL、MySQL高效分页方法探讨

發(fā)布時(shí)間:2025/3/19 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 高效分页查询_PostgreSQL、MySQL高效分页方法探讨 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對于數(shù)據(jù)庫相關(guān)的業(yè)務(wù),逃不過的數(shù)據(jù)分頁場景,無論是前臺分頁瀏覽還是劃到頁面底部自動加載。對于分頁需求,各數(shù)據(jù)庫也提供了成熟的SQL支持,類似于Hibernate等ORM框架也集成了相關(guān)的方法。但是基于數(shù)據(jù)庫(框架)提供的分頁方法,我們能否結(jié)合業(yè)務(wù),提供更高效更優(yōu)化的分頁方法呢?

基礎(chǔ)分頁技術(shù)

數(shù)據(jù)查詢語句中,和分頁相關(guān)的有兩個(gè)參數(shù),分別是:

Limit:查詢數(shù)據(jù)條數(shù)

OFFSET:查詢結(jié)果數(shù)據(jù)起始位置偏移量(跳過的行數(shù))

MySQL中的語法:

SELECT fields_list FROM table_name [ ORDER BY ... ]

[LIMIT offset, limit];

但這個(gè)語法不兼容PostgreSQL,兼容MySQL和PostgreSQL的語法為:

SELECT fields_list FROM table_name [ ORDER BY ... ]

[ LIMIT {number | ALL} ] [ OFFSET number];

注:LIMIT和OFFSET都是可選字段。

下文以第二種兼容的語法來進(jìn)行描述。本文示例的數(shù)據(jù)庫表信息如下:

示例表為訂單表,表名:orders,每頁顯示條數(shù):10 page_sieze。

查詢第一頁:

SELECT * FROM orders ORDER BY order_id

LIMIT 10 OFFSET 0;

查詢第二頁:

SELECT * FROM orders ORDER BY order_id

LIMIT 10 OFFSET 10;

查詢第n頁:

SELECT * FROM orders ORDER BY order_id

LIMIT page_sieze OFFSET page_sieze * n;

分頁優(yōu)化

如果熟悉Openstack API的開發(fā)人員會注意到,Openstack原生API采用了特殊的分頁方式:Openstack分頁以limit和marker兩個(gè)字段進(jìn)行控制,limit控制每頁顯示數(shù)量,marker標(biāo)識數(shù)據(jù)起始位置,即本分頁第一條數(shù)據(jù)的ID。

以nova list的API為例,官方對兩個(gè)字段的說明如下:

Nova List API

Limit字段說明

Requests a page size of items. Returns a number of items up to a limit value. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request.

Marker字段說明

The ID of the last-seen item. Use the limit parameter to make an initial limited request and use the ID of the last-seen item from the response as the marker parameter value in a subsequent limited request.

以上描述中的關(guān)鍵信息是:如果分頁查詢,返回的JSON格式中會包含marker字段,指示下一頁數(shù)據(jù)第一條數(shù)據(jù)的ID。另外這個(gè)API也存在一個(gè)限制,就是分頁時(shí),只能瀏覽上一頁/下一頁,而不能跳頁。

不過借鑒這個(gè)思路,我們可以對某些場景的分頁查詢進(jìn)行優(yōu)化。

對于按需自動加載(劃到頁面底部自動加載更多內(nèi)容)或者只提供上一頁/下一頁瀏覽模式的場景,可以進(jìn)行如下優(yōu)化:

每次查詢數(shù)據(jù)時(shí),我們記錄最后一條數(shù)據(jù)的ID或最后更新時(shí)間(這個(gè)主要根據(jù)order by字段來確定)

加載下一頁數(shù)據(jù)時(shí),把本頁的最后一條數(shù)據(jù)ID作為過濾條件。

加載上一頁數(shù)據(jù)時(shí),則把本頁第一條數(shù)據(jù)ID作為過濾條件。

查詢下一頁

SELECT * FROM orders WHERE order_id > page_last_id ORDER BY order_id

LIMIT page_sieze OFFSET 0;

查詢上一頁

SELECT * FROM orders WHERE order_id < page_first_id ORDER BY order_id

LIMIT page_sieze OFFSET 0;

小技巧:每次查詢數(shù)據(jù)時(shí),多返回一條數(shù)據(jù),即返回page_size + 1條數(shù)據(jù),但顯示時(shí)去掉最后一條數(shù)據(jù),通過這多出來一條數(shù)據(jù),我們可以用來判斷數(shù)據(jù)是否還有下一頁。

另外對于可以跳轉(zhuǎn)到任意頁面的場景,也可以進(jìn)行優(yōu)化,這種可跳轉(zhuǎn)場景,分頁顯示也是有限的,一般模式是第一頁/上一頁/當(dāng)前頁前后10頁……/下一頁/最后一頁,也就是說,分頁時(shí),數(shù)據(jù)是在一定范圍內(nèi)(前后10頁)移動,可以以當(dāng)前頁數(shù)據(jù)為基礎(chǔ),對數(shù)據(jù)進(jìn)行過濾,減少數(shù)據(jù)掃描范圍。

考慮orders表有10W條記錄,每頁顯示10條,當(dāng)前頁碼為1000時(shí)的場景,如果按照單獨(dú)limit和offset模式,offset=1W,也就是數(shù)據(jù)庫要掃碼1W條記錄。假如現(xiàn)在翻頁要從1000頁跳轉(zhuǎn)到1005頁,我們以第1000頁最后一條數(shù)據(jù)ID為過濾條件,offset跳過1001-1004的40條數(shù)據(jù)即可。

查詢1005頁

SELECT * FROM orders WHERE order_id > page_1000_last_id ORDER BY order_id

LIMIT page_sieze OFFSET page_size * 4;

這種方法相比基礎(chǔ)的分頁方式,只要order by字段是主鍵或索引字段,數(shù)據(jù)掃描的行數(shù)從1W多條下降到了幾十條,效率大大提升。

總結(jié)

以上是生活随笔為你收集整理的mysql 高效分页查询_PostgreSQL、MySQL高效分页方法探讨的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 狠狠干性视频 | 狠狠干狠狠艹 | 久久亚洲国产精品 | 一级特毛片 | 超碰超碰超碰超碰超碰 | 一级爱爱片| 男生尿隔着内裤呲出来视频 | 色天天av | 99久久香蕉 | 国产一国产精品一级毛片 | 女人性做爰100部免费 | 日韩资源在线观看 | 国产l精品国产亚洲区久久 午夜青青草 | 成片在线观看 | 六月丁香激情网 | 97色在线观看 | 国产小视频免费 | 最色网站| 日日操夜夜 | 国产成人亚洲一区二区 | 欧美激情亚洲 | 精品国产乱码久久久久久闺蜜 | 国产高清一区二区 | 黑人无套内谢中国美女 | 欧美乱轮视频 | 成人一区二区三区 | 国产精品熟女久久久久久 | 69看片| 成人av小说 | 国产精品日日做人人爱 | 影音先锋伦理片 | 国产精品一区二区三区在线看 | 高清欧美精品xxxxx在线看 | 日日日视频 | 亚洲第一看片 | 国产欧美久久久精品免费 | 翔田千里在线播放 | 久久久视频在线 | 91视频首页| 亚洲成人生活片 | 日本午夜啪啪 | 国产黄a三级三级三级看三级男男 | 国产一级久久久 | 欧美性生交大片免费看app麻豆 | 亚洲午夜无码久久久久 | www.人人草 | 亚洲一区二区三区免费看 | 综合五月婷 | 欧美精品自拍偷拍 | 夜色综合| 亚洲一区偷拍 | 国产欧美精品国产国产专区 | 国产盗摄一区二区三区在线 | a级片在线观看视频 | 窝窝午夜精品一区二区 | 欧美精品久久久久性色 | 好男人www | 国产激情视频一区二区三区 | 在线免费av网站 | 男插女青青影院 | 超级黄色片 | 欧美成人免费视频 | 黄色三级在线观看 | 国产大奶在线 | 国产在线网 | 亚洲国产一区二区三区四区 | 成人福利视频网 | 国产精品欧美综合亚洲 | 精品h| 国产三级在线看 | 天天有av | 国产丰满麻豆 | 91抖音成人 | av永久免费在线观看 | 国产精选视频在线观看 | 色小姐综合 | 国产精品一区二区三区免费视频 | 婷婷六月丁 | 国产精品福利在线播放 | 国内老熟妇对白xxxxhd | 66精品 | 亚洲 欧美 中文字幕 | 日韩欧美一二区 | 老司机精品视频在线播放 | 双性人bbww欧美双性 | 国产精品99久久久精品无码 | 成人免费毛片入口 | 国产一级片自拍 | 少妇中文字幕 | a视频在线观看 | 国产又爽又黄免费软件 | 中国黄色小视频 | 日本一本高清视频 | 一本一道久久综合狠狠老精东影业 | 又污又黄又爽的网站 | 日本爽爽爽爽爽爽在线观看免 | 精品久久久久一区二区国产 | 亚洲三级电影网站 | 亚洲视频精品一区 |