MySQL 大數據量分頁查詢優化指南

問題分析

當對包含50萬條記錄的edu_test表進行分頁查詢時,發現隨著分頁越深入,查詢時間越長:

  • limit 0,10:0.05秒
  • limit 200000,10:0.14秒
  • limit 499000,10:0.21秒

通過EXPLAIN分析發現,limit offset, size會進行全表掃描,掃描后從offset位置開始取size條記錄返回。

優化方案

方案1:通過有序唯一索引縮小掃描范圍

-- 使用主鍵范圍查詢
SELECT * FROM edu_test WHERE id > 499000 ORDER BY id ASC LIMIT 10;
-- 執行時間:0.14秒-- 進一步縮小掃描范圍
SELECT * FROM edu_test WHERE id BETWEEN 499000 AND 499020 ORDER BY id ASC LIMIT 10;
-- 執行時間:0.09秒

優點:利用索引快速定位,減少掃描數據量
前提:必須使用有序且唯一的字段(如自增主鍵)

方案2:子查詢優化

SELECT * FROM edu_test 
WHERE id >= (SELECT id FROM edu_test ORDER BY id LIMIT 499000, 1) 
LIMIT 10;
-- 執行時間:0.16秒

方案3:JOIN查詢優化

SELECT s.* FROM edu_test s
JOIN (SELECT id FROM edu_test ORDER BY id LIMIT 499000, 10) t
ON s.id = t.id;
-- 執行時間:0.16秒

方案2和3的共同優點

  • 先通過索引快速定位到起始ID
  • 再通過主鍵精確查詢所需記錄
  • 避免了全表掃描

實際業務應用建議

  1. 主鍵設計原則

    • 保持主鍵唯一且有序(推薦自增ID)
    • 避免使用業務邏輯復雜的字符串作為主鍵
    • 考慮熱點業務場景,減少回表操作
  2. 復雜場景處理

    • 對于分布式ID或字符串主鍵,可使用WHERE id LIKE '10289%'先縮小范圍
    • 考慮添加輔助索引優化特定查詢場景
  3. 性能權衡

    • 簡單分頁(前幾頁):直接使用LIMIT
    • 深度分頁:采用優化方案
    • 考慮使用"上一頁/下一頁"替代具體頁碼跳轉

通過合理的主鍵設計和查詢優化,可顯著提升大數據量下的分頁查詢性能。

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

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

相關文章

【仿真】Ubuntu 22.04 安裝MuJoCo 3.3.2

官方GIthub下載: https://github.com/google-deepmind/mujoco/releases 官網:MuJoCo — Advanced Physics Simulation 文檔:Overview - MuJoCo Documentation 主要參考:Ubuntu 22.04 安裝Mujoco 3.22 - RobotStudent的文章 - 知乎 簡…

最新字節跳動運維云原生面經分享

繼續分享最新的go面經。 今天分享的是組織內部的朋友在字節的go運維工程師崗位的云原生方向的面經,涉及Prometheus、Kubernetes、CI/CD、網絡代理、MySQL主從、Redis哨兵、系統調優及基礎命令行工具等知識點,問題我都整理在下面了 面經詳解 Prometheus …

PyQt6實例_pyqtgraph散點圖顯示工具_代碼分享

目錄 描述: 效果: 代碼: 返回結果對象 字符型橫坐標 通用散點圖工具 工具主界面 使用舉例 描述: 1 本例結合實際應用場景描述散點圖的使用。在財報分析中,需要將數值放在同行業中進行比較,從而判…

純C協程框架NtyCo

原文是由寫的,寫的真的很好,原文鏈接:純c協程框架NtyCo實現與原理-CSDN博客 1.為什么會有協程,協程解決了什么問題? 網絡IO優化 在CS,BS的開發模式下,服務器的吞吐量是一個受關注的參數&#x…

信息系統項目管理師——第10章 項目進度管理 筆記

10項目進度管理 1.規劃進度管理:項目章程、項目管理計劃(開發方法、范圍管理計劃)、事業環境因素、組織過程資產——專家判斷、數據分析(備選方案分析)、會議——進度管理計劃 2.定義活動:WBS進一步分解&am…

通過門店銷售明細表用SQL得到每月每個門店的銷冠和按月的同比環比數據

假設我在Snowflake里有銷售表,包含ID主鍵、門店ID、日期、銷售員姓名和銷售額,需要統計出每個月所有門店和各門店銷售額最高的人,不一定是一個人,以及他所在的門店ID和月總銷售額。 統計每個月份下,各門店內銷售額最高…

移遠通信LG69T賦能零跑B10:高精度定位護航,共赴汽車智聯未來

當前,汽車行業正以前所未有的速度邁向智能化時代,組合輔助駕駛技術已然成為車廠突出重圍的關鍵所在。高精度定位技術作為實現車輛精準感知與高效協同的基石,其重要性日益凸顯。 作為全球領先的物聯網及車聯網整體解決方案供應商,移…

jmeter-Beashell獲取http請求體json

在JMeter中,使用BeanShell處理器或BeanShell Sampler來獲取HTTP請求體中的JSON數據是很常見的需求。這通常用于在測試計劃中處理和修改請求體,或者在響應后進行驗證。以下是一些步驟和示例代碼,幫助你使用BeanShell來獲取HTTP請求體中的JSON數…

若干查找算法

一、順序查找 1.原理 2.代碼 #if 0 const int FindBySeq(const vector<int>& ListSeq, const int KeyData) {int retrIdx -1;int size ListSeq.size();for(int i 0; i < size; i) {if (ListSeq.at(i) KeyData){retrIdx i;break;}}return retrIdx; } #else c…

Uniapp(vue):生命周期

目錄 一、Vue生命周期二、Uniapp中頁面的生命周期三、執行順序比較一、Vue生命周期 setup():是在beforeCreate和created之前運行的,所以可以用setup代替這兩個鉤子函數。onBeforeMount():已經完成了模板的編譯,但是組件還未掛載到DOM上的函數。onMounted():組件掛載到DOM完…

Prometheus監控

1、docker - prometheusgrafana監控與集成到spring boot 服務_grafana spring boot-CSDN博客 2、【IT運維】普羅米修斯基本介紹及監控平臺部署&#xff08;PrometheusGrafana&#xff09;-CSDN博客 3、Prometheus監控SpringBoot-CSDN博客 4、springboot集成普羅米修斯-CSDN博客…

C#進階學習(十四)反射的概念以及關鍵類Type

目錄 本文末尾有相關類中的總結&#xff0c;如有需要直接跳到最后即可 前置知識&#xff1a; 1、程序集&#xff08;Assembly&#xff09; 2、元數據&#xff08;Metadata&#xff09; 3、中間語言&#xff08;IL, Intermediate Language&#xff09; 中間語言&#xff08;…

Kotlin中的also、apply、invoke用法詳解

以下是 Kotlin 中作用域函數(let、run、with、also、apply)和 invoke 操作符的完整總結,結合代碼示例和對比說明,幫助您理解它們的用法和區別。 一、作用域函數:簡化對象操作 作用域函數用于在對象的上下文中執行代碼塊,并根據函數的不同返回對象本身或 lambda 的結果。…

Ubuntu實現遠程文件傳輸

目錄 安裝 FileZillaUbuntu 配套設置實現文件傳輸 在Ubuntu系統中&#xff0c;實現遠程文件傳輸的方法有多種&#xff0c;常見的包括使用SSH&#xff08;Secure Shell&#xff09;的SCP&#xff08;Secure Copy Protocol&#xff09;命令、SFTP&#xff08;SSH File Transfer P…

TEC制冷片詳解(STM32)

目錄 一、介紹 二、傳感器原理 1.原理圖 2.引腳描述 三、程序設計 main文件 jdq.h文件 jdq.c文件 四、實驗效果 五、資料獲取 項目分享 一、介紹 半導體制冷片&#xff08;又稱熱電模塊&#xff09;&#xff0c;是利用半導體材料的珀耳帖效應制造的一種新型制冷元件…

DotNet 入門:(一) 環境安裝

一、前言 本想用 Go 語言實現一個通過小愛同學操作電腦的&#xff0c;比如我對著手機說打開音樂&#xff0c;或調小音樂&#xff0c;電腦能做相應的處理。奈何我一時間沒看懂&#xff0c;就想著用.Net 來試一下&#xff0c;于是就有了下面這篇文章。 二、安裝.Net 環境 1. 下…

人工智能數學基礎(四):線性代數

線性代數是人工智能領域的核心數學工具之一&#xff0c;廣泛應用于數據表示、模型訓練和算法優化等多個環節。本文將系統梳理線性代數的關鍵知識點&#xff0c;并結合 Python 實例&#xff0c;助力讀者輕松掌握這一重要學科。資源綁定附上完整資源供讀者參考學習&#xff01; …

Github 2025-04-26 Rust開源項目日報Top10

根據Github Trendings的統計,今日(2025-04-26統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Rust項目10Dart項目1RustDesk: 用Rust編寫的開源遠程桌面軟件 創建周期:1218 天開發語言:Rust, Dart協議類型:GNU Affero General Public Li…

使用org.java_websocket庫第三方庫實現廣播

可以使用org.java_websocket庫來實現WebSocket服務器&#xff0c;并通過broadcast方法實現廣播 java實現 import org.java_websocket.WebSocket; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; import java.net.…

【自然語言處理與大模型】LangChain大模型應用框架入門②

本文介紹LangChain的另一個重要組件——提示詞模板&#xff08;Prompt Template&#xff09;組件&#xff0c;它主要用于將用戶輸入和參數轉換為語言模型可理解的指令。有助于引導模型生成符合預期的響應&#xff0c;幫助其更好地理解上下文&#xff0c;從而輸出相關且連貫的語…