最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL深分頁問題四種方案小結(jié)

 更新時間:2024年11月04日 11:32:25   作者:北i  
在數(shù)據(jù)量大時,深分頁查詢速度緩慢,主要原因是多次回表查詢,優(yōu)化方法主要介紹了四種,各方法適用于不同場景,本文就來詳細的介紹一下,感興趣的可以了解一下

mysql深分頁問題:
這個問題在實際項目中很常見,當(dāng)數(shù)據(jù)量大以后,分頁會非常的慢(幾年前做過一個調(diào)度日志的分頁查詢,簡直沒法用)

深分頁為什么慢

 前言:N個條件為索引,id為主鍵
平常分頁一般也是用的PageHelper插件,最終SQL就大致長這個樣:

select id,name from table_name where N個條件 limit 100000,10;

它的執(zhí)行流程:

  • 先去二級索引過濾數(shù)據(jù),然后找到主鍵ID
  • 通過ID回表查詢數(shù)據(jù),取出需要的列
  • 掃描滿足條件的100010,丟棄前面100000條,返回

這里很明顯的不足就是,明明只需要拿10條,確多回表了100000次

優(yōu)化

1. 通過子查詢優(yōu)化

優(yōu)化回表次數(shù)

select id,name FROM table_name t1 where id >= (select id from table_name where update_time >= '2024-04-01 23:59:59' limit 100000, 1) AND update_time >= '2024-04-01 23:59:59' LIMIT 10;

流程:根據(jù)條件在二級索引進行匹配,得出結(jié)果ID后,外層查詢再根據(jù)結(jié)果ID向后查10個即可

2. 通過 INNER JOIN 優(yōu)化

優(yōu)化回表次數(shù)

SELECT t1.id,t1.name FROM table_name t1 INNER JOIN (SELECT t2.id FROM table_name t2 WHERE t2.update_time >= '2024-04-01 23:59:59' ORDER BY t2.update_time LIMIT 100000, 10) AS t3 on t1.id= t3.id;

上面兩種方式其核心點都是 優(yōu)化回表次數(shù) 這個角度去進行優(yōu)化,但是掃描的行卻并沒有減少,下面有兩種是從減少掃描行入手的方式,不過都有一定限制

3. 標(biāo)簽記錄法

記錄上次查詢的最大ID,再請求下一頁的時候

select id,name FROM table_name where id > 100000 order by id limit 10;

4. between...and...

select  id,name FROM table_name where id between 100000 and 100010 order by id;

局限性:依賴于連續(xù)自增的字段(如果不連續(xù),可以order by 一下 )

補充

是否可帶條件適用場景
子查詢后臺系統(tǒng)多條件分頁
INNER JOIN后臺系統(tǒng)多條件分頁
標(biāo)簽記錄法滑動分頁(如app商品列表、新聞資訊列表)
between...and...滑動分頁

之前在項目后臺管理系統(tǒng)中采用的 標(biāo)簽記錄法,根據(jù)條件快速定位到ID,然后再次根據(jù)條件向后掃描指定行數(shù),前端也一并改造,禁止輸入頁數(shù),僅允許點擊下一頁上一頁[既然都出現(xiàn)深分頁問題了,那業(yè)務(wù)也不需要支持使用者隨意跳頁,因為沒有任何意義,他要跳到八千五百三十一頁看什么呢?]

到此這篇關(guān)于MySQL深分頁問題四種方案小結(jié)的文章就介紹到這了,更多相關(guān)MySQL深分頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SQL實現(xiàn)LeetCode(177.第N高薪水)

    SQL實現(xiàn)LeetCode(177.第N高薪水)

    這篇文章主要介紹了SQL實現(xiàn)LeetCode(177.第N高薪水),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Linux下卸載MySQL數(shù)據(jù)庫

    Linux下卸載MySQL數(shù)據(jù)庫

    如何在Linux平臺卸載MySQL呢?這篇文章主要介紹了Linux下卸載MySQL數(shù)據(jù)庫的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 麒麟系統(tǒng)上安裝?MySQL?8.0.24的詳細步驟(避坑指南)

    麒麟系統(tǒng)上安裝?MySQL?8.0.24的詳細步驟(避坑指南)

    這篇文章主要介紹了麒麟系統(tǒng)上安裝MySQL8.0.24的詳細步驟,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • mysql中#{}和${}的區(qū)別詳解

    mysql中#{}和${}的區(qū)別詳解

    本文主要介紹了mysql中#{}和${}的區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • MySQL 大表的count()優(yōu)化實現(xiàn)

    MySQL 大表的count()優(yōu)化實現(xiàn)

    這篇文章主要介紹了MySQL 大表的count()優(yōu)化實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 談?wù)凪ySQL中的隱式轉(zhuǎn)換

    談?wù)凪ySQL中的隱式轉(zhuǎn)換

    這篇文章主要介紹了MySQL中的隱式轉(zhuǎn)換的相關(guān)資料,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-10-10
  • MySQL 索引原理、分類、優(yōu)化與面試總結(jié)

    MySQL 索引原理、分類、優(yōu)化與面試總結(jié)

    文章主要介紹了索引的概念、分類及應(yīng)用場景,詳細講解了索引優(yōu)化(如覆蓋索引優(yōu)化、前綴索引優(yōu)化、主鍵的選擇和最左匹配原則等),本文結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2026-04-04
  • mysql字符切割的四種方式匯總

    mysql字符切割的四種方式匯總

    這篇文章主要介紹了mysql字符切割的四種方式匯總,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SQL和NoSQL之間的區(qū)別總結(jié)

    SQL和NoSQL之間的區(qū)別總結(jié)

    在本篇內(nèi)容里我們給大家精選了關(guān)于SQL和NoSQL之間的區(qū)別的總結(jié)內(nèi)容,對此有需要的朋友們跟著學(xué)習(xí)下。
    2019-02-02
  • Sql查詢MySql數(shù)據(jù)庫中的表名和描述表中字段(列)信息

    Sql查詢MySql數(shù)據(jù)庫中的表名和描述表中字段(列)信息

    這篇文章主要介紹了Sql查詢獲取MySql數(shù)據(jù)庫中的表名和描述表中列名數(shù)據(jù)類型,長度,精度,是否可以為null,默認值,是否自增,是否是主鍵,列描述等列信息
    2017-12-12

最新評論

杂多县| 项城市| 射洪县| 荆门市| 司法| 曲阜市| 乾安县| 临澧县| 沙坪坝区| 定南县| 中西区| 太原市| 南开区| 彰化市| 和田市| 治多县| 开远市| 合山市| 威海市| 固镇县| 绩溪县| 庄浪县| 定边县| 昌都县| 元阳县| 苍山县| 门头沟区| 台湾省| 嘉祥县| 海宁市| 晋州市| 海口市| 东丰县| 若尔盖县| 武汉市| 进贤县| 阿克苏市| 巫山县| 深州市| 华安县| 东莞市|