亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mysql分頁(yè)時(shí)offset過(guò)大的Sql優(yōu)化經(jīng)驗(yàn)分享

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

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

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

通常分頁(yè)查詢的時(shí)候會(huì)使用這樣的語(yǔ)句:

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

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

原因?yàn)椋?/strong>

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

優(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

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

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

    MySQL 如何使用事務(wù)

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

    SQL左連接和右連接原理及實(shí)例解析

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

    MySQL數(shù)據(jù)庫(kù)innodb啟動(dòng)失敗無(wú)法重啟的解決方法

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

    MySQL中SQL Mode的查看與設(shè)置詳解

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

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

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

    MySQL 修改密碼實(shí)例詳解

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

    MySQL通過(guò)DQL實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的基本查詢

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

最新評(píng)論