国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

分頁(yè)查詢出現(xiàn)數(shù)據(jù)重復(fù)或丟失,你遇到過嗎?

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
如果是 app 端的查詢,不建議設(shè)計(jì)多字段排序,因?yàn)樵诙嘧侄闻判虻沫h(huán)境下,服務(wù)端在進(jìn)行多條件的過濾查詢時(shí),可能會(huì)把有效的數(shù)據(jù)給過濾掉,如果無(wú)法避開,盡量將多個(gè)排序字段合并到一個(gè)排序字段上,保證數(shù)據(jù)的查詢符合預(yù)期。

?一、問題背景

最近部分銷售人員反饋在 APP 上查詢自己名下客戶訂單數(shù)據(jù)時(shí),當(dāng)往下拉取數(shù)據(jù)的時(shí)候,列表上經(jīng)常出現(xiàn)重復(fù)的訂單數(shù)據(jù),經(jīng)過排查,后端代碼是通過如下方式來(lái)實(shí)現(xiàn)數(shù)據(jù)的分頁(yè)查詢的。

limit offset, size order by create_time desc

經(jīng)過細(xì)致的分析,這種排序方式,在 app 端分頁(yè)查詢的時(shí)候,確實(shí)存在問題。

詳細(xì)的分析過程如下!

二、原因分析

首先我們初始化一張表,用于模擬訂單表查詢。

CREATE TABLE `tb_order` (
`order_id` bigint(11) unsigned NOT NULL,
`create_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

然后初始化 5 條數(shù)據(jù)進(jìn)去,方便數(shù)據(jù)分析

INSERT INTO `tb_order` (`order_id`, `create_time`) VALUES (1, '2023-03-03 12:00:01');
INSERT INTO `tb_order` (`order_id`, `create_time`) VALUES (2, '2023-03-03 12:00:02');
INSERT INTO `tb_order` (`order_id`, `create_time`) VALUES (3, '2023-03-03 12:00:03');
INSERT INTO `tb_order` (`order_id`, `create_time`) VALUES (4, '2023-03-03 12:00:04');
INSERT INTO `tb_order` (`order_id`, `create_time`) VALUES (5, '2023-03-03 12:00:05');

假設(shè)我們每次只查詢 2 條數(shù)據(jù),并且按照時(shí)間倒序來(lái)查詢,結(jié)果如下:

-- 發(fā)起第一頁(yè)查詢
select * from tb_order order by create_time desc limit 0,2;
-- 第一頁(yè)查詢結(jié)果
|order_id | create_time |
|5 | 2023-03-03 12:00:05|
|4 | 2023-03-03 12:00:04|

-- 發(fā)起第二頁(yè)查詢
select * from tb_order order by create_time desc limit 2,2;
-- 第二頁(yè)查詢結(jié)果
|order_id | create_time |
|3 | 2023-03-03 12:00:03|
|2 | 2023-03-03 12:00:02|

當(dāng)訂單數(shù)據(jù)沒有發(fā)生變動(dòng)的時(shí)候,這種查詢方式是不會(huì)造成出現(xiàn)重復(fù)的數(shù)據(jù)問題。

但是當(dāng)訂單數(shù)據(jù)發(fā)生了變動(dòng),比如在查詢的時(shí)候,突然新增了訂單數(shù)據(jù),此時(shí)的查詢結(jié)果就完全不一樣了。

還是以上面為例,假設(shè)在第一次查詢的時(shí)候,突然新增了一條數(shù)據(jù),看看結(jié)果如何。

-- 發(fā)起第一頁(yè)查詢
select * from tb_order order by create_time desc limit 0,2;
-- 第一頁(yè)查詢結(jié)果
|order_id | create_time |
|5 | 2023-03-03 12:00:05|
|4 | 2023-03-03 12:00:04|

-- 新增一條訂單數(shù)據(jù)
INSERT INTO `tb_order` (`order_id`, `create_time`) VALUES (6, '2023-03-03 12:00:06');

-- 發(fā)起第二頁(yè)查詢
select * from tb_order order by create_time desc limit 2,2;
-- 第二頁(yè)查詢結(jié)果
|order_id | create_time |
|4 | 2023-03-03 12:00:04|
|3 | 2023-03-03 12:00:03|

可以很明顯的發(fā)現(xiàn),訂單ID=4的數(shù)據(jù),出現(xiàn)在頁(yè)面上兩次,正常情況下只有一次!

圖片

上面說(shuō)到的是新增一條數(shù)據(jù),假設(shè)刪除某條數(shù)據(jù),看看結(jié)果如何。

-- 發(fā)起第一頁(yè)查詢
select * from tb_order order by create_time desc limit 0,2;
-- 第一頁(yè)查詢結(jié)果
|order_id | create_time |
|5 | 2023-03-03 12:00:05|
|4 | 2023-03-03 12:00:04|

-- 刪除一條訂單數(shù)據(jù)
delete from tb_order where order_id = 4;

-- 發(fā)起第二頁(yè)查詢
select * from tb_order order by create_time desc limit 2,2;
-- 第二頁(yè)查詢結(jié)果
|order_id | create_time |
|2 | 2023-03-03 12:00:02|
|1 | 2023-03-03 12:00:01|

可以很明顯的發(fā)現(xiàn),刪除訂單ID=4的數(shù)據(jù)之后,頁(yè)面查詢結(jié)果直接到訂單ID=2了,直接跳過訂單ID=3了,也就是說(shuō)訂單ID=3的數(shù)據(jù)展示,丟失了!

圖片

總結(jié)下來(lái),結(jié)論如下!

  • 當(dāng)新增某條數(shù)據(jù)之后,通過常規(guī)的分頁(yè)查詢,列表會(huì)出現(xiàn)數(shù)據(jù)重復(fù)的現(xiàn)象;
  • 當(dāng)刪除某條數(shù)據(jù)之后,通過常規(guī)的分頁(yè)查詢,列表會(huì)出現(xiàn)數(shù)據(jù)丟失的現(xiàn)象;

那怎么解決以上的問題呢?辦法如下!

三、解決方案

針對(duì)上面所說(shuō)的分頁(yè)查詢方式,我們需要做一些調(diào)整,調(diào)整辦法如下:

  • 第一步:當(dāng)查詢出當(dāng)頁(yè)的數(shù)據(jù)之后,記錄下本次拉取的最后一條數(shù)據(jù)的排序字段值;當(dāng)發(fā)起下一頁(yè)數(shù)據(jù)查詢的時(shí)候,帶上這個(gè)參數(shù),服務(wù)端通過這個(gè)參數(shù)做過濾條件
  • 第二步:排序字段值不能出現(xiàn)重復(fù)

以上面的新增為例,詳細(xì)的實(shí)踐過程如下:

-- 發(fā)起第一頁(yè)查詢
select * from tb_order order by create_time desc limit 0,2;
-- 第一頁(yè)查詢結(jié)果
|order_id | create_time |
|5 | 2023-03-03 12:00:05|
|4 | 2023-03-03 12:00:04|

-- 新增一條訂單數(shù)據(jù)
INSERT INTO `tb_order` (`order_id`, `create_time`) VALUES (6, '2023-03-03 12:00:06');

-- 發(fā)起第二頁(yè)查詢,帶上第一頁(yè)查詢的最后一條數(shù)據(jù)的排序字段值
select * from tb_order where create_time < '2023-03-03 12:00:04' order by create_time desc limit 0,2;
-- 第二頁(yè)查詢結(jié)果
|order_id | create_time |
|3 | 2023-03-03 12:00:03|
|2 | 2023-03-03 12:00:02|

此時(shí)的查詢結(jié)果正常,符合預(yù)期效果!

同樣的,以上面的刪除為例,詳細(xì)的實(shí)踐過程如下:

-- 發(fā)起第一頁(yè)查詢
select * from tb_order order by create_time desc limit 0,2;
-- 第一頁(yè)查詢結(jié)果
|order_id | create_time |
|5 | 2023-03-03 12:00:05|
|4 | 2023-03-03 12:00:04|

-- 刪除一條訂單數(shù)據(jù)
delete from tb_order where order_id = 4;

-- 發(fā)起第二頁(yè)查詢
select * from tb_order where create_time < '2023-03-03 12:00:04' order by create_time desc limit 0,2;
-- 第二頁(yè)查詢結(jié)果
|order_id | create_time |
|3 | 2023-03-03 12:00:03|
|2 | 2023-03-03 12:00:02|

查詢結(jié)果與預(yù)期一致,正常!

四、深入思考

  • 選擇的排序字段值出現(xiàn)了重復(fù),怎么辦?

在上面我們提到了,排序字段值不能出現(xiàn)重復(fù)的要求,但是現(xiàn)實(shí)的情況是,如果以訂單的創(chuàng)建時(shí)間來(lái)排序,當(dāng)同一秒多次下單的時(shí)候大概率會(huì)出現(xiàn)重復(fù),這個(gè)時(shí)候只能在訂單表里面新增一個(gè)排序字段,設(shè)置全局唯一索引,內(nèi)容是以時(shí)間為基礎(chǔ)來(lái)生成,比如雪花算法,或者自己寫一個(gè)基于時(shí)間全局自增的算法,確保全局唯一,最重要的是值的長(zhǎng)度必須固定,訂單主鍵 ID 的生成規(guī)則推薦采用此方式,利用主鍵 ID 來(lái)排序效率查詢會(huì)非常高!

  • 當(dāng)出現(xiàn)多個(gè)排序字段時(shí),如何處理?

如果是 app 端的查詢,不建議設(shè)計(jì)多字段排序,因?yàn)樵诙嘧侄闻判虻沫h(huán)境下,服務(wù)端在進(jìn)行多條件的過濾查詢時(shí),可能會(huì)把有效的數(shù)據(jù)給過濾掉,如果無(wú)法避開,盡量將多個(gè)排序字段合并到一個(gè)排序字段上,保證數(shù)據(jù)的查詢符合預(yù)期。

五、小結(jié)

本文主要圍繞 app 端分頁(yè)查詢出現(xiàn)數(shù)據(jù)重復(fù)或丟失的問題,進(jìn)行一次復(fù)盤總結(jié),如果有描述不對(duì)的地方,歡迎網(wǎng)友留言指出!

六、參考

1、知乎 - HQGDD - 分頁(yè)出現(xiàn)數(shù)據(jù)重復(fù)或丟失的問題,一文搞定!

責(zé)任編輯:武曉燕 來(lái)源: 鴨血粉絲Tang
相關(guān)推薦

2020-11-08 14:38:35

JavaScript代碼開發(fā)

2011-04-26 09:22:05

SQLite

2009-07-23 15:07:32

2021-12-26 14:32:11

緩存數(shù)據(jù)庫(kù)數(shù)據(jù)

2018-04-25 10:57:00

AIX報(bào)錯(cuò)vios

2020-10-12 09:49:14

C++ 開發(fā)代碼

2021-08-29 18:36:17

MySQL技術(shù)面試題

2020-09-24 10:49:09

iOSiPadOSBug

2019-09-15 22:36:26

數(shù)據(jù)庫(kù)查詢?nèi)罩?/a>檢索

2021-12-30 09:32:04

緩存數(shù)據(jù)庫(kù)數(shù)據(jù)

2024-03-18 08:14:07

SpringDAOAppConfig

2022-10-20 18:00:59

OCP模型參數(shù)

2018-03-26 09:39:06

大數(shù)據(jù)IT互聯(lián)網(wǎng)

2021-04-04 22:31:26

白帽子廠商漏洞

2019-10-28 14:07:29

研發(fā)管理技術(shù)

2017-07-14 09:29:45

AndroidWebview

2025-05-28 00:00:01

MySQL場(chǎng)景索引

2021-02-19 11:01:46

異步競(jìng)態(tài)接口異步

2020-04-26 14:40:19

戴爾

2021-05-27 09:27:35

開發(fā)技能緩存
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲va男人天堂| 中文字幕av一区二区三区四区| 国内精品久久影院| 久久色.com| 成人美女视频| 91免费国产精品| 中文字幕欧美专区| 国产成人精品网址| 国产精品成人国产| www国产精品内射老熟女| 综合久久五月天| 91精品论坛| 亚洲高清不卡一区| 亚洲韩国欧洲国产日产av| 蜜桃在线一区二区三区| 免费高潮视频95在线观看网站| 一区二区三区在线视频111| 日韩麻豆第一页| 国产a精品视频| 精品国产亚洲一区二区三区大结局| 久久精品99国产| 91国产美女视频| 性久久久久久久久| 夜夜嗨网站十八久久| av资源新版天堂在线| 日韩一级片免费视频| 欧美激情在线狂野欧美精品| 亚洲人妖av一区二区| 99久精品视频在线观看视频| 国产天堂在线| 欧美一级片免费观看| 最近2019中文字幕第三页视频| 91麻豆国产福利精品| 国产99精品| 91这里只有精品| 老司机av福利| 国内成人精品一区| 欧美日韩亚洲91| 日韩专区一卡二卡| 国产一区二区在线观| 三上悠亚一区二区三区| 国产伦精品一区二区三| 亚洲国产免费av| 国产区在线观看成人精品| 偷偷www综合久久久久久久| 好吊日av在线| 岛国毛片在线播放| 精品亚洲一区二区三区四区五区高| 精品亚洲一区二区三区| 亚洲人吸女人奶水| 在线视频亚洲| 日本亚洲欧洲无免费码在线| 玖草视频在线| 中国一级黄色录像| 国产精品久久久久aaaa九色| 欧美成人video| 亚洲欧洲日本在线| 男男视频亚洲欧美| 少妇精品久久久| 涩涩网在线视频| 最近2018中文字幕免费在线视频| 欧美一区二区影视| 欧美一级淫片videoshd| 欧美一区二区三区视频| 国产女人18水真多18精品一级做 | 偷拍精品精品一区二区三区| 男男gay免费网站| 免费在线一区二区| 国产一二精品视频| 欧美色婷婷久久99精品红桃| 俄罗斯一级**毛片在线播放| 亚洲欧美久久久久| 亚洲精品乱码久久久久久蜜桃91| 欧洲成人在线观看| 亚洲国产日韩欧美综合久久| 亚洲午夜久久久久久久久电影院 | 激情一区二区三区| 久久99精品国产99久久6尤物| 欧美日本国产一区| 国产精品伦理一区二区| 美女在线一区二区| 成人在线免费观看网站| 久久亚洲资源中文字| 日韩在线资源| 91福利电影| 嫩草影院中文字幕| 国产视频在线观看一区| 97精品在线视频| 亚洲精品视频网上网址在线观看| 五月婷婷激情综合网| 久久久久久久久99精品| 日精品一区二区三区| 国产精品久久久久无码av| 欧美日韩黄色| 成人福利视频| av在线免费观看网| www.xxx黄| 国产精品国产对白熟妇| 精品欧美一区二区在线观看视频 | 青草综合视频| 美女写真理伦片在线看| 97在线观看免费高清视频| av片中文字幕| 日本特级黄色大片| 蜜桃传媒视频麻豆第一区免费观看| 国产精品免费观看在线| 精品少妇v888av| 亚洲欧洲日产国产网站| 91精品国产综合久久久久久久| 精品久久久久久久久国产字幕 | 1313精品午夜理伦电影| 成人直播视频| 国内精品久久久久久野外| 天堂av在线资源| 中文字幕毛片| 色偷偷福利视频| 少妇人妻互换不带套| 黄色片免费在线观看视频| 性欧美videosex高清少妇| 国产精品免费一区二区三区观看| 国产精品久久久久久网站| 国产亚洲综合在线| 青青草国产精品亚洲专区无| 久久国产日本精品| 欧美视频网站| 国产精品v亚洲精品v日韩精品| 午夜激情久久| 婷婷六月综合| 久久久久久久久久久久久久| 成人一区而且| 欧美中文字幕一区二区| 国产一区二区在线| 国内精品久久久久久久影视简单| 老司机精品在线| 91成人短视频| 高清日韩欧美| 久久精品福利| 日韩系列在线| 性欧美lx╳lx╳| 久9久9色综合| 日韩在线理论| 中文无码久久精品| 欧美激情第二页| 欧美 日韩 国产一区二区在线视频| 久久激情电影| 欧美午夜国产| 亚洲中午字幕| 蜜桃视频一区二区三区在线观看| 久久成人18免费观看| 国产91精品久久久久久久网曝门 | 精品国内二区三区| 欧美一卡二卡在线| 成人午夜影视| 亚洲欧美国产日韩中文字幕| 国产精品视频一区二区三区不卡| 久久国产精品一区二区| 久久精品国产一区二区三区免费看| 欧美亚洲三级| 91精品国产欧美一区二区| 一女二男3p波多野结衣| 精品国产一区二区三区久久狼黑人 | 欧美精品做受xxx性少妇| 日韩女优视频免费观看| 日韩免费福利电影在线观看| 韩国欧美一区二区| 这里只有精品在线播放| 在线观看国产中文字幕| 欧美美乳视频| 日韩欧美有码在线| 亚洲国产精品无码av| 欧美日韩中字| 亚洲精品久久久久久久久久久久| 16—17女人毛片毛片| 亚洲精品免费在线看| 台湾无码一区二区| 亚洲一级免费观看| 在线麻豆国产传媒1国产免费| 九色蝌蚪在线| 国产精品—色呦呦| 日韩美香港a一级毛片| 欧美高清视频看片在线观看 | 亚洲中文字幕无码av永久| 欧美日韩中文在线视频| 91av入口| 电影在线高清| 亚洲伦理影院| 蜜桃精品wwwmitaows| 欧美三级不卡| 久久99精品久久只有精品| 91麻豆国产在线观看| 亚洲国产精品综合小说图片区| 欧美日韩三级视频| 国产午夜精品全部视频在线播放| 高清欧美性猛交xxxx黑人猛交| 亚洲综合国产精品| 99视频精品全部免费看| 免费激情网址| 男女在线观看视频| 日韩深夜福利| 久久一区二区三区四区五区|