Mysql数据库分页查询及优化
????????最近遇到個數據庫分頁查詢問題,mysql數據庫分頁查詢默認是升序查詢,就是第一頁查詢的是最先插入的數據,最后一頁才是最新插入的數據,弄了個小的數據庫表單,記錄下我的操作過程,還有優化查詢速度的方法。
???????假設我的數據庫里的表名為WHITELISTDATA,數據一共有13條,每頁要求顯示10條數據?
1、一般分頁查詢方法:
第一頁:
select * from WHITELISTDATA order by id limit 0,10備注:假如前端傳入page=1,size=10,表示后端需要返回第一頁數據,該頁最大顯示10條 上面的命令的最后兩個數字0和10是傳入的參數 0 =(page-1)*size 10 = size(備注:limit后面的0是頁數減1然后乘以每頁顯示數量10,limit的詳細的分頁知識可以自行再另外查詢資料)
查詢第二頁:
select * from WHITELISTDATA order by id limit 10,102、優化查詢方法(利用子查詢進行優化查詢)
查詢第一頁方法:
select * from WHITELISTDATA where id >= (select id from WHITELISTDATA order by id limit 0,1) limit 10;查詢第二頁方法:
select * from WHITELISTDATA where id >= (select id from WHITELISTDATA order by id limit 10,1) limit 10;備注:
優化的數據庫查詢當數據在上萬情況下第二種方法比第一種方法快好幾倍的查詢速度
在此我大概解釋下優化提速的原因:普通方法查詢的時候會遍歷數據庫的每行和每列數據,全部都要讀一遍,所以數據上萬條了,鍵值又多的話會慢的不行。
優化用的子查詢方法就要稍微好點,他首先是通過這條語句《select id from WHITELISTDATA order by id limit 0,1》查詢到分頁查詢的那個ID值,不是遍歷每行每列數據,耗時少,然后再根據這條語句《select * from WHITELISTDATA where id >= 》查詢ID值大于上面查詢出來的那個ID值得數據即可,所以遍歷的數據就只有10條數據,所以當數據量很大的時候查詢速度會快很多。
3、降序查詢
上面的查詢方式都是通過ID的升序查詢,所以在分頁查詢的時間,新添加的數據會被放到最后一頁,有些需求是最新添加的數據需要放在最前面,保證用戶方便查看,所以此時需要降序查詢,數據庫查詢默認情況下是升序查詢,降序查詢需要修改一些參數,本質就是加一個desc參數。
普通方法的降序查詢:
降序查詢第一頁數據方法
select * from WHITELISTDATA order by id desc limit 0,10降序查詢第二頁數據方法
select * from WHITELISTDATA order by id desc limit 10,10;優化降序查詢方法:
優化降序查詢第一頁數據方法
select * from WHITELISTDATA where id <= (select id from WHITELISTDATA order by id desc limit 0,1) order by id desc limit 10;優化降序查詢第二頁數據方法
select * from WHITELISTDATA where id <= (select id from WHITELISTDATA order by id desc limit 10,1) order by id desc limit 10;總結
以上是生活随笔為你收集整理的Mysql数据库分页查询及优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小志志和小峰峰的日常(SG函数)
- 下一篇: 技术团队管理经验总结(持续更新)