mysql分頁的主要目的就是提公升效率,今天我們將簡單介紹如何構建高效mysql分頁。
首先看一下分頁的基本原理:
limit 10000,20的意思掃瞄滿足條件的10020行,扔掉前面的10000行,返回最後的20行,問題就在這裡,如果是limit 100000,100,需要掃瞄100100行,在乙個高併發的應用裡,每次查詢需要掃瞄超過10w行,效能肯定大打折扣。文中還提到limit n效能是沒問題的,因為只掃瞄n行。
不管翻多少頁,每次查詢只掃瞄20行。
如果limit m,n不可避免的話,要優化效率,只有盡可能的讓m小一下,我們擴充套件前面的」clue」做法,還是select * from message order by id desc,按id降序分頁,每頁20條,當前是第10頁,當前頁條目id最大的是9527,最小的是9500,比如要跳到第8頁,我看的sql語句可以這樣寫:
跳轉到第13頁:
原理還是一樣,記錄住當前頁id的最大值和最小值,計算跳轉頁面和當前頁相對偏移,由於頁面相近,這個偏移量不會很大,這樣的話m值相對較小,大大減少掃瞄的行數。其實傳統的limit m,n,相對的偏移一直是第一頁,這樣的話越翻到後面,效率越差,而上面給出的方法就沒有這樣的問題。
注意sql語句裡面的asc和desc,如果是asc取出來的結果,顯示的時候記得倒置一下。
已在60w資料總量的表中測試,效果非常明顯。
構建高效的MySQL分頁
mysql分頁的主要目的就是提公升效率,今天我們將簡單介紹如何構建高效mysql分頁。首先看一下分頁的基本原理 limit 10000,20的意思掃瞄滿足條件的10020行,扔掉前面的10000行,返回最後的20行,問題就在這裡,如果是limit 100000,100,需要掃瞄100100行,在乙個...
高效的MySQL分頁
size large percona performance conference 2009上,來自雅虎的幾位工程師帶來了一篇 efficient pagination using mysql 的報告,有很多亮點,本文是在原文基礎上的進一步延伸。首先看一下分頁的基本原理 mysql explain ...
Mysql高效分頁
通常針對mysql大資料量的查詢採取 分頁 策略,但是如果翻頁到比較靠後的位置時查詢將變得很慢,因為mysql將花費大量的時間來掃瞄需要丟棄的資料。通常情況下,為了實現高效分頁,需要在查詢中where條件列和排序列應用組合索引。例如,建立索引 a,b,c 使得以下查詢可以使用索引,提高查詢效率 1 ...