監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉
鷹潭網(wǎng)站建設(shè)公司

當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 江西OA系統(tǒng) > 鷹潭OA > 鷹潭網(wǎng)站建設(shè)公司

有關(guān)MySQL分頁

申請免費(fèi)試用、咨詢電話:400-8352-114

鷹潭網(wǎng)站建設(shè)www.diyphp.net

PERCONA PERFORMANCE CONFERENCE 2009上,來自雅虎的幾位工程師帶來了一篇”Efficient Pagination Using MySQL“的陳述,有許多亮點(diǎn),本文是在原文基礎(chǔ)上的進(jìn)一步延伸。

  首要看一下分頁的基本原理:

  mysql> explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20G

  ***************** 1. row **************

  id: 1

  select_type: SIMPLE

  table: message

  type: index

  possible_keys: NULL

  key: PRIMARY

  key_len: 4

  ref: NULL

  rows: 10020

  Extra:

  1 row in set (0.00 sec)

  limit 10000,20的意思掃描滿意條件的10020行,丟掉前面的10000行,回來最終的20行,問題就在這里,若是是limit 100000,100,需求掃描100100行,在一個高并發(fā)的使用里,每次查詢需求掃描超越10W行,功能必定大打折扣。文中還提到limit n功能是沒問題的,由于只掃描n行。

  文中提到一種”clue”的做法,給翻頁供給一些”頭緒”,比方仍是SELECT * FROM message ORDER BY id DESC,按id降序分頁,每頁20條,當(dāng)時是第10頁,當(dāng)時頁條目id最大的是9527,最小的是9500,若是咱們只供給”上一頁”、”下一頁”這樣的跳轉(zhuǎn)(不供給到第N頁的跳轉(zhuǎn)),那么在處置”上一頁”的時分SQL句子可所以:

 

  SELECT * FROM message WHERE id > 9527 ORDER BY idASC LIMIT 20;

  處置”下一頁”的時分SQL句子可所以:

  SELECT * FROM message WHERE id < 9500 ORDER BY idDESC LIMIT 20;

 

  不論翻多少頁,每次查詢只掃描20行。

  缺陷是只能供給”上一頁”、”下一頁”的鏈接辦法,可是咱們的產(chǎn)物司理十分喜歡”<上一頁 1 2 3 4 5 6 7 8 9 下一頁>”這樣的鏈接辦法,怎么辦呢?

  若是LIMIT m,n不可避免的話,要優(yōu)化功率,只要盡可能的讓m小一下,咱們擴(kuò)大前面的”clue”做法,仍是SELECT * FROM message ORDER BY id DESC,按id降序分頁,每頁20條,當(dāng)時是第10頁,當(dāng)時頁條目id最大的是9527,最小的是9500,比方要跳到第8頁,我看的SQL句子可以這樣寫:

  SELECT * FROM message WHERE id > 9527 ORDER BY idASC LIMIT 20,20;

  跳轉(zhuǎn)到第13頁:

  SELECT * FROM message WHERE id < 9500 ORDER BY idDESC LIMIT 40,20;

 

  原理仍是一樣,記載住當(dāng)時頁id的最大值和最小值,核算跳轉(zhuǎn)頁面和當(dāng)時頁相對偏移,由于頁面附近,這個偏移量不會很大,這樣的話m值相對較小,大大削減掃描的行數(shù)。其實(shí)傳統(tǒng)的limit m,n,相對的偏移一直是第一頁,這樣的話越翻到后邊,功率越差,而上面給出的辦法就沒有這樣的問題。

  注重SQL句子里面的ASC和DESC,若是是ASC取出來的成果,顯現(xiàn)的時分記住倒置一下。

  已在60W數(shù)據(jù)總量的表中測驗(yàn),作用十分顯著。

 

發(fā)布:2007-03-31 14:58    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
鷹潭OA
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢

泛普鷹潭網(wǎng)站建設(shè)公司其他應(yīng)用

鷹潭軟件開發(fā)公司 鷹潭門禁系統(tǒng) 鷹潭物業(yè)管理軟件 鷹潭倉庫管理軟件 鷹潭餐飲管理軟件 鷹潭網(wǎng)站建設(shè)公司