国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL百萬數(shù)據(jù)深度分頁優(yōu)化思路分析

這篇具有很好參考價(jià)值的文章主要介紹了MySQL百萬數(shù)據(jù)深度分頁優(yōu)化思路分析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

博客園圖片丟失了,可以點(diǎn)這個(gè)鏈接進(jìn)行查看本文

業(yè)務(wù)場景

一般在項(xiàng)目開發(fā)中會(huì)有很多的統(tǒng)計(jì)數(shù)據(jù)需要進(jìn)行上報(bào)分析,一般在分析過后會(huì)在后臺(tái)展示出來給運(yùn)營和產(chǎn)品進(jìn)行分頁查看,最常見的一種就是根據(jù)日期進(jìn)行篩選。這種統(tǒng)計(jì)數(shù)據(jù)隨著時(shí)間的推移數(shù)據(jù)量會(huì)慢慢的變大,達(dá)到百萬、千萬條數(shù)據(jù)只是時(shí)間問題。

瓶頸再現(xiàn)

創(chuàng)建了一張user表,給create_time字段添加了索引。并在該表中添加了100w條數(shù)據(jù)。

我們這里使用limit分頁的方式查詢下前5條數(shù)據(jù)和后5條數(shù)據(jù)在查詢時(shí)間上有什么區(qū)別。

查詢前10條基本上不消耗什么時(shí)間

我們從第50w+開始取數(shù)據(jù)的時(shí)候,查詢耗時(shí)1秒。

SQL_NO_CACHE

這個(gè)關(guān)鍵詞是為了不讓SQL查詢走緩存。

同樣的SQL語句,不同的分頁條件,兩者的性能差距如此之大,那么隨著數(shù)據(jù)量的增長,往后頁的查詢所耗時(shí)間按理會(huì)越來越大。

問題分析

回表

我們一般對(duì)于查詢頻率比較高的字段會(huì)建立索引。索引會(huì)提高我們的查詢效率。我們上面的語句使用了SELECT * FROM user,但是我們并不是所有的字段都建立了索引。當(dāng)從索引文件中查詢到符合條件的數(shù)據(jù)后,還需要從數(shù)據(jù)文件中查詢到?jīng)]有建立索引的字段。那么這個(gè)過程稱之為回表。

覆蓋索引

如果查詢的字段正好創(chuàng)建了索引了,比如 SELECT create_time FROM user,我們查詢的字段是我們創(chuàng)建的索引,那么這個(gè)時(shí)候就不需要再去數(shù)據(jù)文件里面查詢,也就不需要回表。這種情況我們稱之為覆蓋索引

IO

回表操作通常是IO操作,因?yàn)樾枰鶕?jù)索引查找到數(shù)據(jù)行后,再根據(jù)數(shù)據(jù)行的主鍵或唯一索引去聚簇索引中查找具體的數(shù)據(jù)行。聚簇索引一般是存儲(chǔ)在磁盤上的數(shù)據(jù)文件,因此在執(zhí)行回表操作時(shí)需要從磁盤讀取數(shù)據(jù),而磁盤IO是相對(duì)較慢的操作。

LIMTI 2000,10 ?

你有木有想過LIMIT 2000,10會(huì)不會(huì)掃描1-2000行,你之前有沒有跟我一樣,覺得數(shù)據(jù)是直接從2000行開始取的,前面的根本沒掃描或者不回表。其實(shí)這樣的寫法,一個(gè)完整的流程是查詢數(shù)據(jù),如果不能覆蓋索引,那么也是要回表查詢數(shù)據(jù)的。

現(xiàn)在你知道為什么越到后面查詢?cè)铰税桑?/p>

問題總結(jié)

我們現(xiàn)在知道了LIMIT 遇到后面查詢的性能越差,性能差的原因是因?yàn)橐乇?/strong>,既然已經(jīng)找到了問題那么我們只需要減少回表的次數(shù)就可以提升查詢性能了。

解決方案

既然覆蓋索引可以防止數(shù)據(jù)回表,那么我們可以先查出來主鍵id(主鍵索引),然后將查出來的數(shù)據(jù)作為臨時(shí)表然后 JOIN 原表就可以了,這樣只需要對(duì)查詢出來的5條結(jié)果進(jìn)行數(shù)據(jù)回表,大幅減少了IO操作。

優(yōu)化前后性能對(duì)比

我們看下執(zhí)行效果:

  • 優(yōu)化前:1.4s

  • 優(yōu)化后:0.2s

查詢耗時(shí)性能大幅提升。這樣如果分頁數(shù)據(jù)很大的話,也不會(huì)像普通的limit查詢那樣慢。文章來源地址http://www.zghlxwxcb.cn/news/detail-437262.html

到了這里,關(guān)于MySQL百萬數(shù)據(jù)深度分頁優(yōu)化思路分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Mysql深度分頁優(yōu)化的一個(gè)實(shí)踐

    Mysql深度分頁優(yōu)化的一個(gè)實(shí)踐

    問題簡述: 最近在工作中遇到了大數(shù)據(jù)量的查詢場景, 日產(chǎn)100w左右明細(xì), 會(huì)查詢近90天內(nèi)的數(shù)據(jù), 總數(shù)據(jù)量約1億,?業(yè)務(wù)要求支持分頁查詢與導(dǎo)出. 無論是分頁或?qū)С龆忌婕暗缴疃确猪摬樵? mysql通過limit/offset實(shí)現(xiàn)的深度分頁查詢會(huì)存在全表掃描的問題, 比如offset=1000w, limit=10, 那么

    2024年01月19日
    瀏覽(17)
  • 面試官:Mysql千萬級(jí)大表如何進(jìn)行深度分頁優(yōu)化?

    假如有一張千萬級(jí)的訂單表,這張表沒有采用分區(qū)分表,也沒有使用ES等技術(shù),分頁查詢進(jìn)行到一定深度分頁之后(比如1000萬行后)查詢比較緩慢,我們?cè)撊绾芜M(jìn)行優(yōu)化? 訂單表結(jié)構(gòu)如下: 其中 Mysql 版本為8.0。我們使用Python腳本向表中插入2000萬條數(shù)據(jù)。 導(dǎo)出數(shù)據(jù)時(shí)我們需

    2024年02月19日
    瀏覽(22)
  • MySQL大數(shù)據(jù)量分頁查詢方法及其優(yōu)化

    ---方法1: 直接使用數(shù)據(jù)庫提供的SQL語句 ---語句樣式: MySQL中,可用如下方法: SELECT * FROM 表名稱 LIMIT M,N ---適應(yīng)場景: 適用于數(shù)據(jù)量較少的情況(元組百/千級(jí)) ---原因/缺點(diǎn): 全表掃描,速度會(huì)很慢 且 有的數(shù)據(jù)庫 結(jié)果集返回不穩(wěn)定 (如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是從

    2024年02月15日
    瀏覽(20)
  • MySQL分頁查詢?cè)斀猓簝?yōu)化大數(shù)據(jù)集的LIMIT和OFFSET

    MySQL分頁查詢?cè)斀猓簝?yōu)化大數(shù)據(jù)集的LIMIT和OFFSET

    最近在工作中,我們遇到了一個(gè)需求,甲方要求直接從數(shù)據(jù)庫導(dǎo)出一個(gè)業(yè)務(wù)模塊中所有使用中的工單信息。為了實(shí)現(xiàn)這一目標(biāo),我編寫了一條SQL查詢語句,并請(qǐng)求DBA協(xié)助導(dǎo)出數(shù)據(jù)。盡管工單數(shù)量并不多,只有3000多條,但每個(gè)工單都包含了大量的信息。DBA進(jìn)行了多次導(dǎo)出操作,

    2024年02月10日
    瀏覽(16)
  • MySQL數(shù)據(jù)庫進(jìn)行性能優(yōu)化的思路

    對(duì)MySQL數(shù)據(jù)庫進(jìn)行性能優(yōu)化的思路可以涵蓋以下方面: 索引優(yōu)化: 索引是提高查詢性能的關(guān)鍵。確保表中的關(guān)鍵列和經(jīng)常用于查詢條件的列都被適當(dāng)?shù)貏?chuàng)建了索引??梢允褂?CREATE INDEX 語句添加索引,或者使用 ALTER TABLE 語句在已有表上添加索引。例如,對(duì)于一個(gè)用戶表中的

    2024年02月06日
    瀏覽(25)
  • MySQL千萬級(jí)數(shù)據(jù)查詢的優(yōu)化技巧及思路

    隨著數(shù)據(jù)量的不斷增長,MySQL千萬級(jí)數(shù)據(jù)查詢的優(yōu)化問題也日益引人注目。在這篇文章中,我們將深入探討MySQL千萬級(jí)數(shù)據(jù)查詢優(yōu)化的方法和技巧,以幫助開發(fā)者更好地優(yōu)化MySQL性能。 數(shù)據(jù)庫設(shè)計(jì)是優(yōu)化查詢性能的關(guān)鍵,以下是一些可用的技巧: 垂直拆分和水平拆分 垂直拆分

    2024年02月10日
    瀏覽(21)
  • 掌握MySQL分庫分表(一)數(shù)據(jù)庫性能優(yōu)化思路、分庫分表優(yōu)缺點(diǎn)

    不能?上來就說分庫分表! 根據(jù)實(shí)際情況分析,兩個(gè)角度思考:不分庫分表、分庫分表 軟優(yōu)化 數(shù)據(jù)庫參數(shù)調(diào)優(yōu) 分析慢查詢SQL語句,分析執(zhí)行計(jì)劃,進(jìn)行sql改寫和程序改寫 優(yōu)化數(shù)據(jù)庫索引結(jié)構(gòu) 優(yōu)化數(shù)據(jù)表結(jié)構(gòu)優(yōu)化 引入NOSQL和程序架構(gòu)調(diào)整 硬優(yōu)化 提升系統(tǒng)硬件(更快的IO、更

    2023年04月19日
    瀏覽(36)
  • 百萬數(shù)據(jù)慢慢讀?Pandas性能優(yōu)化法速讀百萬級(jí)數(shù)據(jù)無壓力

    作為數(shù)據(jù)分析工作者,我們每天都要處理大量數(shù)據(jù),這時(shí)Pandas等工具的讀取性能也就備受關(guān)注。特別是當(dāng)數(shù)據(jù)集達(dá)到百萬行以上時(shí),如何提高讀取效率,讓數(shù)據(jù)分析工作跑上“快車道”?本文將詳細(xì)分析Pandas讀取大數(shù)據(jù)的性能優(yōu)化方法,以及一些建議和經(jīng)驗(yàn)。 1. 使用SQL進(jìn)行預(yù)處理 可

    2024年02月09日
    瀏覽(23)
  • MySQL 深度分頁

    MySQL 深度分頁是指在分頁查詢數(shù)據(jù)量比較大的表時(shí),需要訪問表中的某一段數(shù)據(jù),而這段數(shù)據(jù)的位置非??亢?,需要通過較大的 offset 來獲取目標(biāo)數(shù)據(jù)。 默認(rèn)分頁即通過 limit #{offset}, #{pageSize} 或 limit #{pageSize} offset #{offset} 來進(jìn)行分頁。二者本質(zhì)上都是全表掃描,MySQL 會(huì)依次取

    2024年01月20日
    瀏覽(12)
  • Mysql——》優(yōu)化limit分頁

    推薦鏈接: ????總結(jié)——》【Java】 ????總結(jié)——》【Mysql】 ????總結(jié)——》【Redis】 ????總結(jié)——》【Kafka】 ????總結(jié)——》【Spring】 ????總結(jié)——》【SpringBoot】 ????總結(jié)——》【MyBatis、MyBatis-Plus】 ????總結(jié)——》【Linux】 ????總結(jié)——》【MongoDB】 ???

    2024年02月13日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包