這篇文章主要介紹了mysql分頁原理和高效率的mysql分頁查詢語句,大家參考使用吧
以前我在mysql中分頁都是用的 limit 100000,20這樣的方式,我相信你也是吧,但是要提高效率,讓分頁的**效率更高一些,更快一些,那我們又該怎麼做呢?
第一部分:看一下分頁的基本原理:
複製**
**如下:
mysql explain select * from message order by id desc limit 10000, 20
***************** 1. row **************
id: 1
select_type: ******
table: message
type: index
possible_keys: null
key: primary
key_len: 4
ref: null
rows: 10020
extra:
1 row in set (0.00 sec)
對上面的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最大的是2519,最小的是2500;
當是第10頁的sql如下:
複製**
**如下:
select * from tb_goods_info where auto_id >=2500 order by auto_id asc limit 0,20
比如要跳到第9頁,sql語句可以這樣寫:
複製**
**如下:
select * from tb_goods_info where auto_id <2500 order by auto_id desc limit 0,20
比如要跳到第8頁,sql語句可以這樣寫:
複製**
**如下:
select * from tb_goods_info where auto_id <2500 order by auto_id desc limit 20,20
比如要跳到第7頁,sql語句可以這樣寫:
複製**
**如下:
select * from tb_goods_info where auto_id <2500 order by auto_id desc limit 40,20
跳轉到第11頁:
複製**
**如下:
select * from tb_goods_info where auto_id >2519 order by auto_id asc limit 0,20
跳轉到第12頁:
複製**
**如下:
select * from tb_goods_info where auto_id >2519 order by auto_id asc limit 20,20
跳轉到第13頁:
複製**
**如下:
select * from tb_goods_info where auto_id >2519 order by auto_id asc limit 40,20
原理還是一樣,記錄住當前頁id的最大值和最小值,計算跳轉頁面和當前頁相對偏移,由於頁面相近,這個偏移量不會很大,這樣的話m值相對較小,大大減少掃瞄的行數。其實傳統的limit m,n,相對的偏移一直是第一頁,這樣的話越翻到後面,效率越差,而上面給出的方法就沒有這樣的問題。
注意sql語句裡面的asc和desc,如果是asc取出來的結果,顯示的時候記得倒置一下。
已在60w資料總量的表中測試,效果非常明顯
mysql分頁原理和高效率的mysql分頁查詢語句
以前我在mysql中分頁都是用的 limit 100000,20這樣的方式,我相信你也是吧,但是要提高效率,讓分頁的 效率更高一些,更快一些,那我們又該怎麼做呢?第一部分 看一下分頁的基本原理 複製 如下 mysql explain select from message order by id d...
mysql分頁原理和高效率的mysql分頁查詢語句
以前我在mysql中分頁都是用的 limit 100000,20這樣的方式,我相信你也是吧,但是要提高效率,讓分頁的 效率更高一些,更快一些,那我們又該怎麼做呢?第一部分 看一下分頁的基本原理 如下 mysql explain select from message order by id desc...
mysql分頁原理和高效率的mysql分頁查詢語句
以前我在mysql中分頁都是用的 limit 100000,20這樣的方式,我相信你也是吧,但是要提高效率,讓分頁的 效率更高一些,更快一些,那我們又該怎麼做呢?第一部分 看一下分頁的基本原理 複製 如下 mysql explain select from message order by id d...