上億數(shù)據深度分頁優(yōu)化方案

一陈肛、場景舉例

1盏档、推送中心,從表中查詢千萬數(shù)據然后推送微信公眾號小程序燥爷;

2蜈亩、訪問某小程序的積分商城查看商品,一直滑動翻頁前翎,不用跳轉到指定頁數(shù)稚配;

3、從數(shù)據庫查詢百萬客戶數(shù)據寫入到redis港华;

二道川、線上問題

深度分頁問題SQL,如下所示:

SELECT
c,id,c.no,c.name
FROM
t_customer c
WHERE
c.delete_flag =0
order by c.id limit #{offset}立宜,#{pageSize}

這種常規(guī)的分頁回導致冒萄,當翻頁很深,offset越來越大橙数,回表的記錄越來越多尊流,sql查詢性能會急劇下降,會出現(xiàn)大量的慢SOL(超過1s的)

三灯帮、解決方案

limit用于分頁查詢時越往后翻性能越差崖技,解決的原則:縮小掃描范圍逻住,如下所示

1、子查詢

利用聚簇索引減少回表迎献,從而提升查詢效率瞎访,類似以下的SQL:

SELECT
c.id,c.name",c.no
FROM
t_customer c
where
c.id >= (select id from tcustomer WHERE delete_flag = 0 ORDER BY id imit #{loffset),1) limit #ipageSize)

2、內連接(inner join)

把子查詢(利用聚簇索引)的結果當成一張臨時表吁恍,然后和原表進行關聯(lián)查詢扒秸,類似以下的SOL:

SELECT
c.id,c.'name",c.no
FROM
t_customer c,
(SELECT id FROM t_customer WHERE delete_flag = 0 ORDER BY id LIMIT #{offset}, #{pageSize}) as d
where
c.id = d.id;

3、使用游標分頁查詢

當我們查詢第二頁的時候冀瓦,把第一頁的查詢結果(返回最后一條記錄的Id)放到第二頁的查詢條件中鸦采,類似以下的SQL:

SELECT
c.id,c.no,c.name
FROM
t_customer c
WHERE
c.delete_flag =and id > #{lastId} order by c.id limit #{pageSize};

線上總結: 如果數(shù)據量上千萬甚至上億了,使用第三種方案最好咕幻;如果定時任務Job查詢渔伯,也是使用第三種方案最好;如果是百萬級別的c端查詢肄程,可以用第一種或者第二種方案锣吼。

4、利用redis的pipeline批量寫入數(shù)據到redis蓝厌,提供寫入redis效率

同時玄叠,為了防止短時間寫入命令太高,導致redis cpu飆高拓提,可以每寫入一批读恃,sleep 500ms;

單機可以這樣操作代态,但是集群的話寺惫,性能不一定高,因為多個key不再同一集群節(jié)點上蹦疑。

pipeline 操作見Redis(九):Pipeline(管道)VS Lua(腳本)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末西雀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子歉摧,更是在濱河造成了極大的恐慌艇肴,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叁温,死亡現(xiàn)場離奇詭異再悼,居然都是意外死亡,警方通過查閱死者的電腦和手機膝但,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門冲九,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锰镀,你說我怎么就攤上這事娘侍】校” “怎么了泳炉?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵憾筏,是天一觀的道長。 經常有香客問我花鹅,道長氧腰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任刨肃,我火速辦了婚禮古拴,結果婚禮上,老公的妹妹穿的比我還像新娘真友。我一直安慰自己黄痪,他們只是感情好,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布盔然。 她就那樣靜靜地躺著桅打,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愈案。 梳的紋絲不亂的頭發(fā)上挺尾,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音站绪,去河邊找鬼遭铺。 笑死,一個胖子當著我的面吹牛恢准,可吹牛的內容都是我干的魂挂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼馁筐,長吁一口氣:“原來是場噩夢啊……” “哼锰蓬!你這毒婦竟也來了?” 一聲冷哼從身側響起眯漩,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤芹扭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赦抖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舱卡,經...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年队萤,在試婚紗的時候發(fā)現(xiàn)自己被綠了轮锥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡要尔,死狀恐怖舍杜,靈堂內的尸體忽然破棺而出新娜,到底是詐尸還是另有隱情,我是刑警寧澤既绩,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布概龄,位于F島的核電站,受9級特大地震影響饲握,放射性物質發(fā)生泄漏私杜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一救欧、第九天 我趴在偏房一處隱蔽的房頂上張望衰粹。 院中可真熱鬧,春花似錦笆怠、人聲如沸铝耻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓢捉。三九已至,卻和暖如春箍铭,著一層夾襖步出監(jiān)牢的瞬間泊柬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工诈火, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留兽赁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓冷守,卻偏偏與公主長得像刀崖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拍摇,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內容