|
1、limit m,n分頁語句:
select * from dept order by deptno desc limit 3,3;
select * from dept order by deptno desc limit m,n;
limit 3,3的意思掃描滿足條件的3+3行,撇去前面的3行,返回最后的3行,那么問題來了,如果是limit 200000,200,需要掃描200200行,如果在一個高并發(fā)的應用里,每次查詢需要掃描超過20W行,效率十分低下。
2、limit m語句:
select * from dept where deptno >10 order by deptno asc limit n;//下一頁
select * from dept where deptno <60 order by deptno desc limit n//上一頁
這種方式不管翻多少頁只需要掃描n條數(shù)據(jù)。
3、方法2 雖然掃描的數(shù)據(jù)量少了,但是在某些需要跳轉(zhuǎn)到多少也得時候就無法實現(xiàn),這時還是需要用到方法1,既然不能避免,那么我們可以考慮盡量減小m的值,因此我們可以給這條語句加上一個條件限制。是的每次掃描不用從第一條開始。這樣就能盡量減少掃描的數(shù)據(jù)量。
例如:每頁10條數(shù)據(jù),當前是第10頁,當前條目ID的最大值是109,最小值是100.
那么跳到第9頁:
select * from dept where deptno<100 order by desc limit 0,10;
那么跳到第8頁:
select * from dept where deptno<100 order by desc limit 10,10;
那么跳到第11頁:
select * from dept where deptno>109 order by asc limit 0,10;
那么跳到第11頁:
select * from dept where deptno>109 order by asc limit 10,10;
|
|
|