MySQL 深度分頁優化

MySQL 深度分頁優化

理解總結:

分頁使用limit ,前提是要排序好的數據,這時候,就推薦使用帶索引的字段排序,因為索引是天然有序的,不需要像是無序的字段一樣,全表掃描,如果太大的話,還filesort ,利用文件排序,排序完成之后,才能分頁,很慢。但是,如果分頁過深的話,比如limit100萬,仍然無需要查詢到100萬數據,中間有大量的io操作(回表查詢其它字段),這時候考慮用上子查詢,先查到100萬位置的往后10條數據(直接用id主鍵查,因為沒有回表,直接索引查,所以很快),然后再關聯10條數據,取得完整的數據。

舉例:

1. 沒有查詢條件,沒有排序

耗時0.613s

select id,m_id, name, identity_no, address, create_time, modify_time  from t1 limit 1000000, 20;

加上主鍵排序

耗時0.41

**select** id,m_id, name, identity_no, address, create_time, modify_time  **from** t1 **order** **by** id limit 1000000, 20;

加上主鍵排序,使用了主鍵索引,天然有序,所以只讀取前n條數據,所以更快

2. 帶排序-排序字段沒有索引

select id,m_id, name, identity_no, address, create_time, modify_time 
from t1 
order by create_time desc 
limit 10000, 20;

耗時2秒左右

select id,m_id, name, identity_no, address, create_time, modify_time
from t2
order by create_time desc
limit 10000, 20;

與t1基本相同,只是加了索引,耗時0.9s左右

對比:沒有索引的表,全表掃描,排序用到filesort 。有索引的話,可以利用索引排序,limit 的話,掃描的數據有少。

3. 排序字段有索引,但是分頁很深,從100w開始取20條。

select id,m_id, name, identity_no, address, create_time, modify_time 
from t2 
order by create_time desc 
limit 1000000, 20;

很慢,沒有走索引,因為MySQL優化器發現這條sql查詢超過一定的比例,就會自動轉成全表掃描

加force index(idx),強制走索引。有效果,但是不明顯。

結論即使有索引,再深一點的分頁也會有問題,要避免

5. 解決方案

聯表子查詢

-- 改為:
SELECT   id, m_id, NAME, identity_no, address, create_time, modify_time 
FROM t2
JOIN ( SELECT id FROM t2 ORDER BY create_time desc LIMIT 1000000, 20 ) x USING ( id );

變成0.7s;原來15s。

-- 在t1執行:
SELECT   id, m_id, NAME, identity_no, address, create_time, modify_time 
FROM t1
JOIN ( SELECT id FROM t1 ORDER BY create_time desc LIMIT 1000000, 20 ) x USING ( id );

這個也很快,2.8s。原來18s+

分析

直接通過索引樹就能拿到查詢字段的值,索引快的原因是,子查詢查詢的方式,減少了回表查詢操作,進而減少了大量的回表IO,因為高效。

參考:https://juejin.cn/post/6985478936683610149

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37995.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37995.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37995.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

“深入探究JVM:解密Java虛擬機的工作原理“

標題:深入探究JVM:解密Java虛擬機的工作原理 摘要:本文將深入探究Java虛擬機(JVM)的工作原理,包括JVM的組成部分、類加載過程、運行時數據區域、垃圾回收機制以及即時編譯器等。通過解密JVM的工作原理&…

js加密解決方案1:在AutoJS中實現Promise的必要性、好處與缺點

AutoJS是一款強大的Android自動化工具,可以幫助用戶編寫腳本來實現手機自動化操作。然而,它的加密代碼只支持ES5語法,不支持許多ES6的新特性,如Promise等功能。如果想在ES5語法環境中使用ES6的一些新特性,就需要自己實…

汽車上的電源模式詳解

① 一般根據鑰匙孔開關的位置來確定整車用電類別,汽車上電源可以分為常電,IG電,ACC電 1)常電。常電表示蓄電池和發電機輸出直接供電,即使點火開關在OFF檔時,也有電量供應。一般來講模塊的記憶電源及需要在車…

Python系統學習1-7-字典

一、字典 1、概念及內存圖 列表:由一系列變量組成的可變序列容器字典:由一系列鍵值對組成的可變散列容器字典優勢:利用(內存)空間,換取(CPU查找)時間 鍵key 必須唯一且為不…

hbase 報錯 Master passed us a different hostname to use; was=

原因 wsl2的 /etc/hosts 配置的不兼容,我這里是ubuntu22 命令行輸入hostname 看輸出什么,比如輸出 aaa 那么替換/etc/hosts 127.0.0.1 aaa

vb+sql醫院門診管理系統設計與系統

摘要 信息時代已經來臨,計算機應用于醫院的日常管理,為醫院的現代化帶來了從未有過的動力和機遇,為醫療衛生領域的發展提供了無限的潛力。采用計算機管理信息系統已成為醫院管理科學化和現代化的標志,給醫院帶來了明顯的經濟效益和社會效益。 本文介紹了數據庫管理系統的…

每天一個知識點——L2R

面試的時候,雖然做過醫療文獻搜索,也應用過L2R的相關模型,但涉及到其中的一些技術細節,都會成為我拿不下offer永遠的痛。也嘗試過去理解去背下一些知識點,終究沒有力透紙背,隨著時間又開始變得模糊&#xf…

海量數據遷移,亞馬遜云科技云數據庫服務為大庫治理提供新思路

1.背景 目前,文檔型數據庫由于靈活的schema和接近關系型數據庫的訪問特點,被廣泛應用,尤其是游戲、互聯網金融等行業的客戶使用MongoDB構建了大量應用程序,比如游戲客戶用來處理玩家的屬性信息;又如股票APP用來存儲與時…

Stable Diffusion - 幻想 (Fantasy) 風格與糖果世界 (Candy Land) 人物提示詞配置

歡迎關注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132212193 圖像由 DreamShaper8 模型生成,融合糖果世界。 幻想 (Fantasy) 風格圖像是一種以想象力為主導的藝術形式,創造了…

27.Netty源碼之FastThreadLocal

highlight: arduino-light FastThreadLocal FastThreadLocal 的實現與 ThreadLocal 非常類似,Netty 為 FastThreadLocal 量身打造了 FastThreadLocalThread 和 InternalThreadLocalMap 兩個重要的類。下面我們看下這兩個類是如何實現的。 FastThreadLocalThread 是對…

【論文閱讀】NoDoze:使用自動來源分類對抗威脅警報疲勞(NDSS-2019)

NODOZE: Combatting Threat Alert Fatigue with Automated Provenance Triage 伊利諾伊大學芝加哥分校 Hassan W U, Guo S, Li D, et al. Nodoze: Combatting threat alert fatigue with automated provenance triage[C]//network and distributed systems security symposium.…

uniapp安卓ios打包上線注意事項

1、安卓包注意事項 隱私政策彈框提示 登錄頁面隱私政策默認不勾選隱私政策同意前不能獲取用戶權限APP啟動時,在用戶授權同意隱私政策前,APP及SDK不可以提前收集和使用IME1、OAID、IMS1、MAC、應用列表等信息 ios包注意事項 需要有注銷賬號的功能 3、安…

前后端分離------后端創建筆記(05)用戶列表查詢接口(上)

本文章轉載于【SpringBootVue】全網最簡單但實用的前后端分離項目實戰筆記 - 前端_大菜007的博客-CSDN博客 僅用于學習和討論,如有侵權請聯系 源碼:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…

vue3中簡單快速的做個表單輸入框驗證

<el-form ref"formRef" :model"processingProgressForm"><el-form-item label"服務商名稱:" :label-width"120" prop"rejectRemarks" :rules"[{ required: true, message: 服務商名稱不能為空 }]">&l…

通過網關訪問微服務,一次正常,一次不正常 (nacos配置的永久實例卻未啟動導致)

微服務直接訪問沒問題&#xff0c;通過網關訪問&#xff0c;就一次正常訪問&#xff0c;一次401錯誤&#xff0c;交替正常和出錯 負載均衡試了 路由配置檢查了 最后發現nacos下竟然有2個order服務實例&#xff0c;我明明只開啟了一個呀 原來之前的8080端口微服務還殘留&…

基于架構的軟件開發方法

基于架構的軟件開發方法 基于架構的軟件開發方法是由架構驅動的&#xff0c;即指由構成體系結構的商業、質量和功能需求的組合驅動的。使用ABSD 方法&#xff0c;設計活動可以從項目總體功能框架明確就開始&#xff0c;這意味著需求抽取和分析還沒有完成(甚至遠遠沒有完成)&am…

純C#使用Visionpro工具2 操作斑點工具

結果圖 通過斑點工具中非圓性找取圓特征 代碼 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.For…

ApacheCon - 云原生大數據上的 Apache 項目實踐

Apache 軟件基金會的官方全球系列大會 CommunityOverCode Asia&#xff08;原 ApacheCon Asia&#xff09;首次中國線下峰會將于 2023 年 8 月 18-20 日在北京麗亭華苑酒店舉辦&#xff0c;大會含 17 個論壇方向、上百個前沿議題。 字節跳動云原生計算團隊在此次 CommunityOve…

OpenSSL 遠程升級到 3.2.1

OpenSSL 遠程升級到 3.2.1 文章目錄 OpenSSL 遠程升級到 3.2.1背景升級 OpenSSL1. 查看 OpenSSL版本2. 下載最新穩定版本 OpenSSL3. 解壓縮&#xff0c;安裝4. 配置 背景 最近的護網行動&#xff0c;被查出來了好幾個關于OpenSSH的漏洞。需要升級OpenSSH&#xff0c;升級OpenS…