〝 古人學問遺無力,少壯功夫老始成 〞
高效的mysql分頁技巧,分頁功能是一項對技術有著一定要求和理解的專案,因為分頁對資料庫的I/O壓力開銷其實在資料量很大的時候,開銷還是很大的,所以對于分頁功能的高效,將會大大減輕資料庫的壓力,沒有特別幸運,那么請先特別努力,別因為懶惰而失敗,還矯情地將原因歸于自己倒霉,你必須特別努力,才能顯得毫不費力,所以說,樹倒了,沒有一片雪花是無辜的,抽獎都是假的,只有人家想讓你中和不想讓你中,如果大家覺得文章有幫助,請給博主一波關注和評論,
目錄
一、分頁陳述句
二、效率分析
三、上下分頁優化
四、多分頁優化
五、優化后效率
一、分頁陳述句
- 我們一般分頁的sql陳述句都會用到最基礎的limit,如下所示
- 其中的 m,n 代表從m行開始取后面的n行
select * from message order by id desc limit m,n;
二、效率分析
- 雖然上面的陳述句在分頁中并沒有錯
- 大家也知道陳述句本身并沒有錯誤,但是錯就錯在這樣分頁的效率本身是不可取的
- 但是我們來執行下面的陳述句來分析一下這個陳述句的效率究竟是哪里有問題
- 可以看到如果我從10000行開始取20條資料
- 這條陳述句將會掃描10020條資料,相信到這里,大家應該知道我想說的是什么了
- 對,那就是如果資料很大,每次取20條資料都得掃描遠遠超過20條的資料,甚至篩選上百萬條資料后然后選擇20條
- 這里是不是暴露了很大的效率問題,而我們要做的就是如何優化這個問題
explain SELECT * FROM message ORDER BY id DESC LIMIT 10000,20\G
***************** 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)
三、上下分頁優化
- 分頁大概分為2種,一種是只有上下頁兩個按鈕的分頁,另一種是現在大多會使用的分頁,就是可以選擇第幾頁進行跳轉
- 而對于只有上下頁分頁按鈕的優化,其實我們要記住每次分頁的最大數值或者最小數值
- 比如我們當前是第十頁,當前分頁資料最大值為100000,那我們點擊下一頁,也就是第十一頁的時候,可以這樣來寫分頁陳述句
- 比如我們當前是第十頁,當前分頁資料最小值為99980,那我們點擊上一頁,也就是第九頁的時候,可以這樣來寫分頁陳述句
//下一頁
select * from message where id>100000 order by id asc limit 20;
//上一頁
select * from message where id<99980 order by id desc limit 20;
四、多分頁優化
- 而現在都是多分頁,也就是說用戶可以選擇頁面進行跳轉
- 這樣上面僅僅有上下頁按鈕的分頁顯然不能滿足
- 有步驟一種的效率分析可以知道,這部分的效率很差,主要是因為m這個值太大,導致掃描的行數過多導致的
- 那么我們就要想方設法的將m值降低,自然可以優化好分頁這個功能
- 比如我們當前是第十頁,條目最大數值為100000,最小為99980,比如跳到第十二頁或第八頁,可以這樣寫
//從第十頁跳到第十二頁
SELECT * FROM message WHERE id > 100000 ORDER BY id ASC LIMIT 20,20;
//從第十頁跳到第八頁
SELECT * FROM message WHERE id < 99980 ORDER BY id DESC LIMIT 40,20;
五、優化后效率
- 其實優化的原理都是一樣的,就是記錄最大最小值,然后算偏移值,使得m值越小越好
- 因為m值越小,掃描的行數就會越少
- 而相對原始的limit m,n,由于一直相對第一頁進行偏移,效率當然越翻越差了
- 經實戰檢測,優化后的效率,在資料集超過60w后,分頁效率提升的極其明顯
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/286676.html
標籤:其他
上一篇:SQL注入:初步體驗Sqlmap
