日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

在日常開(kāi)發(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)單,開(kāi)發(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開(kāi)銷大:需要讀取大量無(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

    文章

    1131

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    敏源寵物場(chǎng)景多類型檢測(cè)方案,賦能寵物智能硬件升級(jí)

    盆處于轉(zhuǎn)動(dòng)工作狀態(tài)時(shí),一旦檢測(cè)到貓咪躍入,即刻觸發(fā)急停指令,全方位保障寵物使用安全。方案優(yōu)勢(shì): 方案搭載基線跟蹤自適應(yīng)算法,可智能適配周邊環(huán)境變化、抵御環(huán)境干擾,穩(wěn)定規(guī)避復(fù)雜場(chǎng)景誤判,可替代傳統(tǒng)紅外
    發(fā)表于 05-06 16:55

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

    MySQL慢查詢是數(shù)據(jù)庫(kù)性能問(wèn)題的最常見(jià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 ?215次閱讀

    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 ?241次閱讀

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

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

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

    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 ?602次閱讀
    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 ?590次閱讀
    商品類目屬性<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ù)開(kāi)發(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 ?1225次閱讀

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

    在云原生時(shí)代,Prometheus已經(jīng)成為監(jiān)控領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。作為一名資深運(yùn)維工程師,我見(jiàn)過(guò)太多團(tuán)隊(duì)在PromQL查詢上踩坑,也見(jiàn)過(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 ?892次閱讀

    產(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)用示例,幫助開(kāi)發(fā)者快速上手。 什么是產(chǎn)品詳情查詢API接口? 產(chǎn)
    的頭像 發(fā)表于 07-24 14:39 ?734次閱讀
    產(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
    贵港市| 万山特区| 东乡族自治县| 孝义市| 永济市| 霸州市| 宜城市| 武鸣县| 淳安县| 北安市| 竹山县| 炎陵县| 小金县| 迁西县| 鹤峰县| 商丘市| 华亭县| 原平市| 来安县| 南开区| 塔河县| 东山县| 民勤县| 峨山| 石楼县| 张家港市| 古田县| 许昌县| 武宁县| 靖江市| 依安县| 抚松县| 台湾省| 宁化县| 辉南县| 丽江市| 睢宁县| 平果县| 玉屏| 萍乡市| 甘孜县|