更新時間:2020-08-03 來源:黑馬程序員 瀏覽量:
學(xué)過Django框架的同學(xué),一定都使用過Django框架的Paginator分頁功能,今天我們要討論的是關(guān)于使用Paginator進行大數(shù)據(jù)集分頁時,它性能的優(yōu)化問題。
Paginator分頁
下面步入正題,首先我們來看一個Django中使用Paginator進行分頁的例子:
1)首先我創(chuàng)建了一個Django項目并定義了一個User用戶模型類

2)執(zhí)行遷移在數(shù)據(jù)庫中生成tb_users用戶表并添加800萬個測試用戶數(shù)據(jù)

3)編寫使用Paginator類進行分頁的測試代碼,并測試獲取相應(yīng)頁的數(shù)據(jù)

4)分頁測試代碼執(zhí)行完成之后,我們來看終端輸出的內(nèi)容

5)對于上面的分頁測試結(jié)果,我們再來看一下mysql的日志記錄數(shù)據(jù)

注:mysql的日志文件在/var/log/mysql/mysql.log,測試之前可以先使用tail -f /var/log/mysql/mysql.log打開這個文件,測試之后就可以看到對應(yīng)輸出的日志信息
6)看完上面的內(nèi)容之后,接下來我們就可以看Django框架關(guān)于Paginator類分頁的官網(wǎng)文檔了

上面紅色框框里的提示就是告訴我們,在使用Paginator對大數(shù)據(jù)量的QuerySet進行分頁時,如果請求頁碼較大的某頁數(shù)據(jù)時,查詢效率可能會很慢,因為Limit/Offset分頁時,先要根據(jù)Offset偏移量從前向后掃描數(shù)據(jù)。
PS:看到這里,是不是感覺到了官網(wǎng)文檔的重要性,很多問題在官網(wǎng)文檔上都有對應(yīng)的說明,下面附上這個文檔的鏈接:https://docs.djangoproject.com/zh-hans/2.2/topics/pagination/
分頁問題解決
好,說了這么多,最后的問題要來了,怎么解決這個問題呢?下面咱們來說一個很多大廠使用的解決方案,什么方案呢,會不會很高大上呢?
其實很簡單,就是限制用戶請求的最大頁數(shù),比如只允許用戶訪問前100頁的數(shù)據(jù),如果請求的頁碼超過100頁,可以默認返回第1頁的數(shù)據(jù),這樣就不會有上面的問題,是不是很簡單呢。這個思想也很簡單,大家平時搜索內(nèi)容或購買商品時,是不是只會瀏覽前幾頁的內(nèi)容呢?不用我回答,你應(yīng)該已經(jīng)有了答案
小知識:百度搜索內(nèi)容顯示時,只允許用戶訪問前76頁的內(nèi)容;淘寶搜索上面商品顯示時,只允許用戶訪問前100頁的內(nèi)容。
最后,怎么知道這個解決方案的?其實還是在文檔,大家請看。

附上文檔鏈接:https://code.djangoproject.com/ticket/14131,建議大家平時自己多看文檔,授人以魚不如授人以漁,假以時日,這就是你的漁。
好啦,關(guān)于大數(shù)據(jù)集分頁的問題,咱們今天就說到這,有沒有其它方案呢?大家可以多去探索。
猜你喜歡:
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19