欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql分頁時offset過大的Sql優(yōu)化經(jīng)驗分享

 更新時間:2017年08月07日 10:38:00   作者:MartinDai  
mysql分頁是我們在開發(fā)經(jīng)常遇到的一個功能,最近在實現(xiàn)該功能的時候遇到一個問題,所以這篇文章主要給大家介紹了關于mysql分頁時offset過大的Sql優(yōu)化經(jīng)驗,文中介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起看看吧。

發(fā)現(xiàn)問題

當我們展示一個列表中的內(nèi)容時,難免會遇到分頁問題,因為列表中的內(nèi)容數(shù)量可能很多,但是用戶能一次看到的界面大小是有限的,不可能一個界面展示所有的內(nèi)容,從后端一次性取太多的數(shù)據(jù)也會給后端造成額外的壓力。

通常分頁查詢的時候會使用這樣的語句:

SELECT
*
FROM table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000

當offset特別大時,這條語句的執(zhí)行效率會明顯減低,而且效率是隨著offset的增大而降低的。

原因為:

MySQL并不是跳過offset行,而是取offset+N行,然后返回放棄前offset行,返回N行,當offset特別大,然后單條數(shù)據(jù)也很大的時候,每次查詢需要獲取的數(shù)據(jù)就越多,自然就會很慢。

優(yōu)化方案:

SELECT
*
FROM table
JOIN
(select id from table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000)
as tmp using(id)

或者

SELECT a.* FROM table a, 
(select id from table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000) b 
where a.id = b.id

先獲取主鍵列表,再通過主鍵查詢目標數(shù)據(jù),即使offset很大,也是獲取了很多的主鍵,而不是所有的字段數(shù)據(jù),相對而言效率會提升很多。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • Ubuntu20下MySQL?8.0.28?安裝卸載方法圖文教程

    Ubuntu20下MySQL?8.0.28?安裝卸載方法圖文教程

    這篇文章主要為大家詳細介紹了Ubuntu20下MySQL?8.0.28?安裝卸載方法圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • MySQL 相關的環(huán)境變量

    MySQL 相關的環(huán)境變量

    所有使用mysqlclient客戶庫與服務器通信的MySQL客戶使用下列環(huán)境變量
    2009-06-06
  • Navicat 遠程連接 MySQL實現(xiàn)步驟解析

    Navicat 遠程連接 MySQL實現(xiàn)步驟解析

    這篇文章主要介紹了Navicat 遠程連接 MySQL實現(xiàn)步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • MySQL 如何使用事務

    MySQL 如何使用事務

    這篇文章主要介紹了MySQL 如何使用事務,幫助大家更好的理解和學習MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-09-09
  • SQL左連接和右連接原理及實例解析

    SQL左連接和右連接原理及實例解析

    這篇文章主要介紹了SQL左連接和右連接原理及實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • MySQL數(shù)據(jù)庫innodb啟動失敗無法重啟的解決方法

    MySQL數(shù)據(jù)庫innodb啟動失敗無法重啟的解決方法

    這篇文章給大家分享了MySQL數(shù)據(jù)庫innodb啟動失敗無法重啟的解決方法,通過總結(jié)自己遇到的問題分享給大家,讓遇到同樣問題的朋友們可以盡快解決,下面來一起看看吧。
    2016-09-09
  • MySQL中SQL Mode的查看與設置詳解

    MySQL中SQL Mode的查看與設置詳解

    在本篇文章里小編給各位分享的是關于MySQL中SQL Mode的查看與設置詳解內(nèi)容,需要的朋友們可以參考下。
    2020-03-03
  • MySQL數(shù)據(jù)庫索引的弊端及合理使用

    MySQL數(shù)據(jù)庫索引的弊端及合理使用

    索引可以說是數(shù)據(jù)庫中的一個大心臟了,如果說一個數(shù)據(jù)庫少了索引,那么數(shù)據(jù)庫本身存在的意義就不大了,和普通的文件沒什么兩樣,本文從細節(jié)和實際業(yè)務的角度看看在MySQL中B+樹索引好處
    2021-11-11
  • MySQL 修改密碼實例詳解

    MySQL 修改密碼實例詳解

    這篇文章主要介紹了MySQL 修改密碼實例詳解的相關資料,需要的朋友可以參考下
    2017-07-07
  • MySQL通過DQL實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的基本查詢

    MySQL通過DQL實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的基本查詢

    這篇文章給大家介紹了MySQL如何通過DQL進行數(shù)據(jù)庫數(shù)據(jù)的基本查詢,文中通過代碼示例和圖文結(jié)合介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01

最新評論