chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺析分批分頁(yè)查詢場(chǎng)景及方案

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2026-04-03 16:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

在日常開發(fā)中,不可避免的要用到分批查詢或分頁(yè)查詢,其中的場(chǎng)景有很多,有的是WEB頁(yè)面的分頁(yè)查詢效果,或移動(dòng)端向下滑動(dòng)的分頁(yè)查詢,有的則是因?yàn)槟繕?biāo)數(shù)據(jù)量巨大,不得已而分批查詢。無(wú)論是出于性能考慮,還是大報(bào)文考慮,抑或頁(yè)面的效果,分批或分頁(yè)查詢都是研發(fā)的日常。

wKgZPGnPd5CAHOi_AAgCL7I7XRY918.png

?

wKgZO2nPd5KAP4JmABDolRcxkzw412.png

?

本文嘗試,對(duì)日常項(xiàng)目用到的分批分頁(yè)查詢做一下方案的回顧和淺析。

查詢場(chǎng)景及方案

一、普通分批分頁(yè)查詢場(chǎng)景

方案1 普通LIMIT OFFSET分頁(yè)查詢方式

通過(guò)數(shù)據(jù)庫(kù)直接LIMIT OFFSET 的方式是最簡(jiǎn)單,也是最常用的分頁(yè)查詢方式。

SELECT
	id,
	warehouse_no,
	location_no,
	sku,
	sku_level,
	lot_no,
	pack_code,
	owner_no,
	extend_content
FROM
	st_stock
WHERE
	deleted = 0
	AND warehouse_no = '6_666'
ORDER BY
	id ASC 
LIMIT 100,10

該方法直接簡(jiǎn)單,開發(fā)和運(yùn)維簡(jiǎn)單,可讀性高,但當(dāng)offset值(偏移量)非常大時(shí),弊端也比較明顯:深分頁(yè)性能問(wèn)題比較嚴(yán)重,例如 LIMIT 1000000, 10 。

?

當(dāng)執(zhí)行LIMIT 1000000, 10時(shí),SQL的處理流程是:

掃描并讀取前1,000,000條記錄

丟棄這1,000,000條記錄

返回接下來(lái)的10條記錄

這意味著即使只需要10條數(shù)據(jù),數(shù)據(jù)庫(kù)也必須訪問(wèn)和處理大量的"無(wú)用"數(shù)據(jù)。

?

簡(jiǎn)言之,深分頁(yè),IO開銷大:需要讀取大量無(wú)用數(shù)據(jù)頁(yè);內(nèi)存消耗高:大量數(shù)據(jù)加載到內(nèi)存后被丟棄;CPU消耗高:排序、過(guò)濾操作消耗大量CPU資源。

?

方案2 基于子查詢或二次查詢的分頁(yè)查詢

SELECT
	s.id,
	warehouse_no,
	location_no,
	sku,
	sku_level,
	lot_no,
	pack_code,
	owner_no,
	extend_content
FROM
	st_stock s
JOIN
	(
		SELECT
			id
		FROM
			st_stock
		WHERE
			deleted = 0
			AND warehouse_no = '6_666'
		ORDER BY
			id ASC LIMIT 100,10
	)
	s2
ON
	s.id = s2.id

SELECT
    s.id,
    s.warehouse_no,
    s.location_no,
    s.sku,
    s.sku_level,
    s.lot_no,
    s.pack_code,
    s.owner_no,
    s.extend_content
FROM st_stock s
WHERE EXISTS (
    SELECT 1
    FROM (
        SELECT id
        FROM st_stock
        WHERE deleted = 0
            AND warehouse_no = '6_666'
        ORDER BY id ASC
        LIMIT 100,10
    ) AS s2
    WHERE s.id = s2.id
);

?

除了直接在SQL中進(jìn)行分頁(yè)處理,還可以通過(guò)二次查詢的方式來(lái)實(shí)現(xiàn)。

第一步,先分頁(yè)查詢id列表;

SELECT id
FROM st_stock
WHERE deleted = 0
    AND warehouse_no = '6_666'
ORDER BY id ASC
LIMIT 100,10;

id字段有主鍵索引,避免回表。

?

第二步,以第一步的id列表作為in條件,查詢庫(kù)存信息。

SELECT
    id,
    warehouse_no,
    location_no,
    sku,
    sku_level,
    lot_no,
    pack_code,
    owner_no,
    extend_content
FROM st_stock
WHERE id IN (id1, id2, id3, ...);

?

注意:下面的SQL方式是錯(cuò)誤的,SQL語(yǔ)法不支持:

SELECT
	id,
	warehouse_no,
	location_no,
	sku,
	sku_level,
	lot_no,
	pack_code,
	owner_no,
	extend_content
FROM
	st_stock s
    where id in 
	(
		SELECT
			id
		FROM
			st_stock
		WHERE
			deleted = 0
			AND warehouse_no = '6_666'
		ORDER BY
			id ASC LIMIT 100,10
	)

SQL 錯(cuò)誤 [1235] [42000]: This version of SQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

解決方案就是使用上面的方式實(shí)現(xiàn)。

?

方案3 游標(biāo)分頁(yè),滾動(dòng)式查詢

SELECT
	id,
	warehouse_no,
	location_no,
	sku,
	sku_level,
	lot_no,
	pack_code,
	owner_no,
	extend_content
FROM
	st_stock
WHERE
	deleted = 0
	AND warehouse_no = '6_666'
        AND id > 100
ORDER BY
	id ASC 
LIMIT 10

與方案一相比,最大的區(qū)別是增加了id條件,本次id的條件是上一次查詢結(jié)果集中的最大id,通過(guò)id滾動(dòng)式查詢,縮小檢索范圍。

?

wKgZPGnPd5SAa-14AAW7X17KtVE538.png

上圖就是一個(gè)游標(biāo)分頁(yè)查詢的案例。

?

二、動(dòng)態(tài)數(shù)據(jù)分批分頁(yè)導(dǎo)出查詢場(chǎng)景

對(duì)于動(dòng)態(tài)變化的數(shù)據(jù),想要分批分頁(yè)導(dǎo)出,而且想要保證數(shù)據(jù)的準(zhǔn)確性,該如何處理呢?

方案1 對(duì)目標(biāo)數(shù)據(jù)加鎖

將導(dǎo)出條件對(duì)應(yīng)的目標(biāo)數(shù)據(jù)鎖定,導(dǎo)出結(jié)束后再解鎖這批數(shù)據(jù)。導(dǎo)出時(shí)間被鎖定的數(shù)據(jù)行,不能update、delete,可以select。

id SKU …… locked
2019609892142206976 123 …… 1
2019695225349345280 456 …… 1
2019326832070885376 789 …… 1
2027414057350348800 110 …… 0
2027414069316685824 118 …… 0

?

優(yōu)勢(shì)

?可以保持在導(dǎo)出期間穩(wěn)定導(dǎo)出數(shù)據(jù),減少因?yàn)閿?shù)據(jù)的動(dòng)態(tài)變化影響數(shù)據(jù)的準(zhǔn)確性。

?如果在導(dǎo)出期間,符合條件的數(shù)據(jù)庫(kù)行有新增(insert),在數(shù)據(jù)庫(kù)主鍵ID遞增的情況下,新增行的id更大,排序在后,可以正常導(dǎo)出這部分新增數(shù)據(jù),不受影響。

?

劣勢(shì)

?鎖定的這部分導(dǎo)出數(shù)據(jù),在導(dǎo)出期間,只讀,不能執(zhí)行寫服務(wù),相當(dāng)于停產(chǎn)導(dǎo)出,適合于生產(chǎn)低谷時(shí)段或停產(chǎn)時(shí)段進(jìn)行導(dǎo)出。

?

?

方案2 生成導(dǎo)出數(shù)據(jù)快照

將導(dǎo)出條件對(duì)應(yīng)的目標(biāo)數(shù)據(jù)生成導(dǎo)出庫(kù)存快照數(shù)據(jù),導(dǎo)出執(zhí)行是將本次版本的快照數(shù)據(jù)導(dǎo)出,導(dǎo)出數(shù)據(jù)快照過(guò)時(shí)可以清理。

實(shí)時(shí)數(shù)據(jù)

id SKU ……
2019609892142206976 123 ……
2019695225349345280 456 ……
2019326832070885376 789 ……
2027414057350348800 110 ……
2027414069316685824 118 ……

?

快照數(shù)據(jù)

id SKU ……
2019609892142206976 123 ……
2019695225349345280 456 ……
2019326832070885376 789 ……

?

優(yōu)勢(shì)

?在數(shù)據(jù)導(dǎo)出期間穩(wěn)定導(dǎo)出數(shù)據(jù),每次導(dǎo)出的數(shù)據(jù)都有單獨(dú)的導(dǎo)出數(shù)據(jù)快照版本,導(dǎo)出期間數(shù)據(jù)的準(zhǔn)確性得到保障。

?在數(shù)據(jù)導(dǎo)出期間,即使有數(shù)據(jù)的變化,也不影響導(dǎo)出效果。不鎖數(shù)據(jù)行,不影響生成生產(chǎn)作業(yè)。

?

劣勢(shì)

?如果在導(dǎo)出期間,符合條件的數(shù)據(jù)庫(kù)行有新增(insert),這部分?jǐn)?shù)據(jù)即使符合導(dǎo)出條件,也不會(huì)導(dǎo)出,因?yàn)檫@部分新增的數(shù)據(jù)在導(dǎo)出數(shù)據(jù)快照之后生成,并未在快照數(shù)據(jù)中。

?需要生成導(dǎo)出數(shù)據(jù)快照,導(dǎo)出數(shù)據(jù)快照版本需要單獨(dú)的庫(kù)表存儲(chǔ),同時(shí)也會(huì)占用磁盤資源。

?導(dǎo)出數(shù)據(jù)快照生成期間,倘若符合條件的數(shù)據(jù)行有變化,需要對(duì)快照數(shù)據(jù)生成特殊處理,比如一次性生成快照等方式。

?

三、內(nèi)存分頁(yè)查詢場(chǎng)景

在日常研發(fā)過(guò)程中遇到的分頁(yè)查詢,大部分都可以借助SQL數(shù)據(jù)庫(kù)、ES等存儲(chǔ)中間件自身的分頁(yè)功能實(shí)現(xiàn),但個(gè)別場(chǎng)景下并不符合,比如數(shù)據(jù)并未存儲(chǔ)在SQL數(shù)據(jù)庫(kù)或ES中,而是內(nèi)存計(jì)算出來(lái)的一種結(jié)果數(shù)據(jù);或者數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)維度并不符合,并不能通過(guò)簡(jiǎn)單的GROUP BY等方式實(shí)現(xiàn)維度加工;或者數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù),需要通過(guò)第三方RPC遠(yuǎn)程接口實(shí)時(shí)獲取特殊屬性打標(biāo)過(guò)濾后,才可以作為目標(biāo)數(shù)據(jù)使用。

在這些場(chǎng)景下,我們會(huì)用到內(nèi)存分頁(yè)的方式處理。

?

內(nèi)存分頁(yè)方案

wKgZO2nPd5SACPU-AASGd8cuHl4889.png

?

wKgZPGnPd5WAANthAAJ10yGnWj8204.png

?

上面的示例,是一個(gè)簡(jiǎn)單的內(nèi)存分頁(yè)處理方式。

總結(jié)

本文回顧了日常研發(fā)過(guò)程中,經(jīng)常遇到的普通分批分頁(yè)查詢場(chǎng)景、動(dòng)態(tài)數(shù)據(jù)分批分頁(yè)導(dǎo)出查詢場(chǎng)景、內(nèi)存分頁(yè)查詢等場(chǎng)景,探討了對(duì)應(yīng)的解決方案。方案并非固定一成不變的,也有各自的利弊和局限性,在合適場(chǎng)景下,選擇合適的方案即可。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 京東
    +關(guān)注

    關(guān)注

    2

    文章

    1130

    瀏覽量

    50142
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    MySQL慢查詢調(diào)優(yōu)指南

    MySQL慢查詢是數(shù)據(jù)庫(kù)性能問(wèn)題的最常見原因。當(dāng)一條SQL語(yǔ)句執(zhí)行超過(guò)1秒時(shí),就可能影響用戶體驗(yàn);超過(guò)10秒時(shí),通常會(huì)收到用戶投訴;而超過(guò)30秒的查詢,往往意味著系統(tǒng)存在嚴(yán)重的性能問(wèn)題。本文從實(shí)
    的頭像 發(fā)表于 04-09 10:01 ?198次閱讀

    MySQL數(shù)據(jù)庫(kù)慢查詢分析與優(yōu)化實(shí)戰(zhàn)

    在討論MySQL慢查詢之前,需要先明確一個(gè)關(guān)鍵前提:什么是慢查詢? 不同業(yè)務(wù)場(chǎng)景下,慢查詢的定義差異巨大。一個(gè)數(shù)據(jù)報(bào)表后臺(tái)的SQL執(zhí)行30秒可能屬于正常范圍,但一個(gè)訂單創(chuàng)建的數(shù)據(jù)庫(kù)操作
    的頭像 發(fā)表于 04-02 09:38 ?180次閱讀

    2026年HUB芯片方案選擇洞察:從傳輸效率到場(chǎng)景適配的專業(yè)分析與推薦

    隨著Type-C接口普及、高速數(shù)據(jù)傳輸需求激增,HUB芯片已成為消費(fèi)電子、辦公設(shè)備與工業(yè)場(chǎng)景的“連接核心”。對(duì)于正處于方案評(píng)估階段的企業(yè)或開發(fā)者而言,選擇一款適配自身場(chǎng)景的HUB芯片,需跳出“只看
    發(fā)表于 03-20 18:49

    MUN3CAD03-SF:多場(chǎng)景電源模塊替代的優(yōu)選方案

    MUN3CAD03-SF:多場(chǎng)景電源模塊替代的優(yōu)選方案在電子設(shè)計(jì)領(lǐng)域,電源模塊的選型直接決定系統(tǒng)性能與穩(wěn)定性,MUN3CAD03-SF作為一款主流DC-DC電源模塊,雖具備過(guò)流保護(hù)(OCP)、過(guò)溫
    發(fā)表于 02-02 09:51

    從0到1搭建實(shí)時(shí)日志監(jiān)控系統(tǒng):基于WebSocket + Elasticsearch的實(shí)戰(zhàn)方案

    if(this.logs.length>1000)this.logs.pop();// 限制數(shù)量 }; 4. 性能優(yōu)化與坑點(diǎn) ES查詢優(yōu)化 :使用search_after替代from/size,避免深度分頁(yè)性能
    發(fā)表于 01-09 16:43

    Neway電機(jī)方案在電機(jī)控制的應(yīng)用場(chǎng)景

    Neway電機(jī)方案在電機(jī)控制的應(yīng)用場(chǎng)景Neway電機(jī)方案在電機(jī)控制領(lǐng)域的應(yīng)用場(chǎng)景廣泛且效果顯著,其核心優(yōu)勢(shì)在步進(jìn)電機(jī)、伺服電機(jī)控制及CNC機(jī)床主軸驅(qū)動(dòng)等
    發(fā)表于 01-04 10:10

    微店商品列表API,輕松采集商品列表數(shù)據(jù)

    微店商品列表API是微店開放平臺(tái)提供的核心接口,主要用于獲取指定店鋪的商品列表數(shù)據(jù)。該接口支持分頁(yè)查詢、條件篩選和排序功能,適用于電商管理系統(tǒng)、競(jìng)品分析和多平臺(tái)展示等場(chǎng)景。 一、接口概述 1.
    的頭像 發(fā)表于 12-01 14:32 ?578次閱讀

    OBOO鷗柏丨110英寸大屏國(guó)產(chǎn)化麒麟系統(tǒng)觸摸屏人才市場(chǎng)信息查詢

    ,為人才市場(chǎng)招聘查詢帶來(lái)了全新的解決方案。從場(chǎng)景化主體特點(diǎn)來(lái)看,人才市場(chǎng)人流量大,招聘信息查詢需求高。OBOO鷗柏的這款觸摸屏采用110寸臥式設(shè)計(jì),符合人體工程學(xué),
    的頭像 發(fā)表于 11-28 18:40 ?580次閱讀
    OBOO鷗柏丨110英寸大屏國(guó)產(chǎn)化麒麟系統(tǒng)觸摸屏人才市場(chǎng)信息<b class='flag-5'>查詢</b>

    商品類目屬性查詢接口技術(shù)實(shí)現(xiàn)詳解

    ? ? 一、接口核心功能 該接口用于查詢電商系統(tǒng)中商品類目的屬性信息,支持: 按類目ID查詢屬性集合 按屬性類型過(guò)濾(關(guān)鍵屬性$K$、銷售屬性$S$、普通屬性$N$) 分頁(yè)返回屬性數(shù)據(jù) 多語(yǔ)言屬性名
    的頭像 發(fā)表于 10-11 15:43 ?577次閱讀
    商品類目屬性<b class='flag-5'>查詢</b>接口技術(shù)實(shí)現(xiàn)詳解

    別踩分頁(yè)坑!京東商品詳情接口實(shí)戰(zhàn)指南:從并發(fā)優(yōu)化到數(shù)據(jù)完整性閉環(huán)

    京東商品詳情接口(jingdong.ware.get)是電商數(shù)據(jù)開發(fā)的核心難點(diǎn),本文詳解其權(quán)限申請(qǐng)、分頁(yè)優(yōu)化、多規(guī)格遞歸解析與完整性校驗(yàn)等實(shí)戰(zhàn)方案,結(jié)合代碼示例與性能調(diào)優(yōu)參數(shù),助你高效穩(wěn)定對(duì)接,提升數(shù)據(jù)獲取效率2.5倍以上,適用于各類規(guī)模店鋪的數(shù)據(jù)需求。
    的頭像 發(fā)表于 09-30 15:50 ?1206次閱讀

    常用PromQL查詢案例總結(jié)

    在云原生時(shí)代,Prometheus已經(jīng)成為監(jiān)控領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。作為一名資深運(yùn)維工程師,我見過(guò)太多團(tuán)隊(duì)在PromQL查詢上踩坑,也見過(guò)太多因?yàn)楸O(jiān)控不到位導(dǎo)致的生產(chǎn)事故。今天分享10個(gè)實(shí)戰(zhàn)中最常用的PromQL查詢案例,每一個(gè)都是血淚經(jīng)驗(yàn)的總結(jié)。
    的頭像 發(fā)表于 09-18 14:54 ?878次閱讀

    產(chǎn)品詳情查詢API接口

    ,使用HTTP協(xié)議實(shí)現(xiàn)數(shù)據(jù)傳輸,支持多種應(yīng)用場(chǎng)景,包括電商平臺(tái)、移動(dòng)應(yīng)用和數(shù)據(jù)分析系統(tǒng)。本文將逐步介紹產(chǎn)品詳情查詢API接口的核心概念、工作原理、實(shí)現(xiàn)方法以及實(shí)際應(yīng)用示例,幫助開發(fā)者快速上手。 什么是產(chǎn)品詳情查詢API接口? 產(chǎn)
    的頭像 發(fā)表于 07-24 14:39 ?713次閱讀
    產(chǎn)品詳情<b class='flag-5'>查詢</b>API接口

    無(wú)硅油與含硅油導(dǎo)熱片: 精準(zhǔn)匹配不同場(chǎng)景的散熱解決方案

    決策:使用含硅油導(dǎo)熱片還是無(wú)硅油導(dǎo)熱片?事實(shí)上,這兩種材料并非替代關(guān)系,而是針對(duì)不同應(yīng)用場(chǎng)景的互補(bǔ)解決方案。理解它們各自的特性和適用領(lǐng)域,能為電子設(shè)備散熱設(shè)計(jì)提供更精準(zhǔn)的匹配方案。 一、材料特性
    發(fā)表于 07-14 17:04

    媒體查詢詳解

    概述 媒體查詢作為響應(yīng)式設(shè)計(jì)的核心,在移動(dòng)設(shè)備上應(yīng)用十分廣泛。媒體查詢可根據(jù)不同設(shè)備類型或同設(shè)備不同狀態(tài)修改應(yīng)用的樣式。媒體查詢常用于下面兩種場(chǎng)景: 針對(duì)設(shè)備和應(yīng)用的屬性信息(比如
    發(fā)表于 06-25 08:26

    同步電機(jī)失步淺析

    純分享帖,需要者可點(diǎn)擊附件免費(fèi)獲取完整資料~~~*附件:同步電機(jī)失步淺析.pdf【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)第一時(shí)間告知,刪除內(nèi)容!
    發(fā)表于 06-20 17:42