MySQL 性能瓶頸,為什么 MySQL 表的數據量不能太大?

      • MySQL的性能瓶頸(為什么MySQL有幾萬的qps,怎么來的?
          • 性能分析
      • 為什么 MySQL 表不能太大
          • 網上大部分人的說法:
          • 問題的關鍵: B+樹層數對查詢性能的影響到底有多大?
        • 是什么導致的 MySQL 查詢緩慢?
        • 如何解決:

MySQL的性能瓶頸(為什么MySQL有幾萬的qps,怎么來的?

一個全表掃描的查詢: 1000 萬數據的全表掃描 2.1s

-- 千萬數據-- 全表掃描(name 無索引)
--耗時: 2.1s
SELECT * FROM `user` WHERE name='sSehAepjIz';
性能分析
  1. tcp 性能 20 萬, 在查詢中的消耗幾乎忽略不計(可以自己壓一下)
  2. 內存性能千萬級(自己壓: map 性能兩千萬寫,讀 5 千萬),性能幾乎忽略不計
  3. 那么消耗幾乎都在磁盤上面,磁盤 io 是多少?
    a. 一次 io 加載一頁數據 16k
    b. 我的一行數據大概 60 字節,20 行假設 1k,
    c. 一次io 加載 16*20=320 行數據,1000 萬行數據需要 io 3 萬多次,總耗時 2s
    d. 結論: 1s 鐘磁盤 io 1.5 萬次左右,就是MySQL 的性能瓶頸(當然實際的應該更多,因為我的數據實際上是大小是算小了的,還有一些隱藏列什么的,實際值也應該在 1.5-2.5 萬,反正差不多 2 萬級別的)

為什么 MySQL 表不能太大

網上大部分人的說法:
  • MySQL 數據不要超過 2000w,b+樹 3 層剛好可以大概容納 2000w 數據(反正自己算吧),
  • 如果更多 b+樹層數增多,io 次數就會更多,查詢就會變慢.

b+樹層數變多查詢是會變慢,但是這是問題的關鍵?

問題的關鍵: B+樹層數對查詢性能的影響到底有多大?
  1. MySQL 磁盤 io 2 萬的 qps, 一次 io 1 毫秒都不要
  2. b+樹多一層容納的數據量指數級增長(比如 3 層可以容納 2000 萬,4 層就可以容納 200 億行數據)
  3. b+樹查詢是多一層多一次 io, 查詢語句就算用了 10 個索引,多 10 次 io 也就 幾毫秒的事
  4. 結論 : 4 層b+樹(200 億數據)查詢并不會太大的影響數據查詢的性能,就影響幾毫秒(幾乎忽略)
是什么導致的 MySQL 查詢緩慢?

上面已經分析了 MySQL 的性能瓶頸
● 內存 IO : 千萬級 qps
● 網絡IO: 20 萬 qps(tcp)
● 磁盤IO: (2 萬 qps)–瓶頸在這里

所以問題是磁盤 io 變多了,什么會導致磁盤 io 大量增長?

不是 B+樹導致的磁盤 io 變多(b+樹影響小,平均查詢時間只會多幾毫秒,MySQL 又是多線程的,并阻塞其他線程的查詢任務);
而是需要提防的全表掃描
沒有索引(索引不合理)
● 使用方法包裹索引字段
深度分頁問題
這些全部都是全表掃描,巨慢,要掃描全表的數據,磁盤需要io 幾萬次(千萬行), 幾千萬次(百億行);

-- 千萬數據-- 全表掃描(name 無索引)
--耗時: 2.1s
SELECT * FROM `user` WHERE name='sSehAepjIz';-- 索引掃描(create_time 有普通索引)
--耗時: 10ms(快到飛起)
SELECT * FROM `user` WHERE create_time='2024-12-27 04:14:53' ;
如何解決:
  • 首先要避免全表掃描,這很重要,大數據表的全表掃描就是巨慢,走索引就是快(磁盤 io 幾萬次與 io 幾次的差距)
  • 避免一個表中的數量太多(分庫分表)
  • 有的時候難免會使用全表掃描,不可能所有字段都加索引,(索引會影響寫的性能 : 涉及到 b+樹 分分合合的故事; 一般表的索引不會超過 5 個)這里時候需要保證請求最頻繁的業務一定要加索引,哪些幾百年不用幾次的就可以不加.

參考:
https://juejin.cn/post/7165689453124517896,
https://cloud.tencent.com/developer/article/2303654,
https://developer.aliyun.com/article/631927

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

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

相關文章

Linux 實用命令 grep、wc

grep 命令詳解 grep [選項] ‘模式’ 文件名 grep [參數] [選項] [操作對象]grep ‘error’ -c 5 --color info.log [模式]:是要搜索的字符串或正則表達式。 [選項]:是可選的,用于定制grep的行為。 [操作對象]:是要搜索的文件…

【Transformer】深入淺出自注意力機制

寫在前面:博主本人也是剛接觸計算機視覺領域不久,本篇文章是為了記錄自己的學習,大家一起學習,有問題歡迎大家指出。(博主本人的習慣是看文章看到不懂的有立馬去看不懂的那塊,所以博文可能內容比較雜&#…

HarmonyOS NEXT 實戰之元服務:靜態案例效果---教育培訓服務

背景: 前幾篇學習了元服務,后面幾期就讓我們開發簡單的元服務吧,里面豐富的內容大家自己加,本期案例 僅供參考 先上本期效果圖 ,里面圖片自行替換 效果圖1完整代碼案例如下: import { authentication } …

3.阿里云flinkselectdb-py作業

1.概述 Python API中文文檔 本文介紹在阿里云實時計算flink中使用python作業,把oss中的數據同步數據到阿里云selectdb的過程。python簡單的語法特性更適合flink作業的開發; 先說結論: 在實際開發中遇到了很多問題,導致python作業基本基本無法…

互聯網視頻云平臺EasyDSS無人機推流直播技術如何助力野生動植物保護工作?

在當今社會,隨著科技的飛速發展,無人機技術已經廣泛應用于各個領域,為我們的生活帶來了諸多便利。而在動植物保護工作中,無人機的應用更是為這一領域注入了新的活力。EasyDSS,作為一款集視頻處理、分發、存儲于一體的綜…

51c視覺~YOLO~合集8

我自己的原文哦~ https://blog.51cto.com/whaosoft/12897680 1、Yolo9 1.1、YOLOv9SAM實現動態目標檢測和分割 主要介紹基于YOLOv9SAM實現動態目標檢測和分割 背景介紹 在本文中,我們使用YOLOv9SAM在RF100 Construction-Safety-2 數據集上實現自定義對象檢測模…

Docker Container 可觀測性最佳實踐

Docker Container 介紹 Docker Container( Docker 容器)是一種輕量級、可移植的、自給自足的軟件運行環境,它在 Docker 引擎的宿主機上運行。容器在許多方面類似于虛擬機,但它們更輕量,因為它們不需要模擬整個操作系統…

氣相色譜-質譜聯用分析方法中的常用部件,分流平板更換

分流平板,是氣相色譜-質譜聯用分析方法中的一個常用部件,它可以實現氣相色譜柱流與MS檢測器流的分離和分流。常見的氣質聯用儀分流平板有很多種,如單層T型分流平板、雙層T型分流平板、螺旋分流平板等等。 操作視頻http://www.spcctech.com/v…

易基因: BS+ChIP-seq揭示DNA甲基化調控非編碼RNA(VIM-AS1)抑制腫瘤侵襲性|Exp Mol Med

大家好,這里是專注表觀組學十余年,領跑多組學科研服務的易基因。 肝細胞癌(hepatocellular carcinoma,HCC)早期復發仍然是一個具有挑戰性的領域,其中涉及的機制尚未完全被理解。盡管微血管侵犯&#xff08…

鴻蒙系統文件管理基礎服務的設計背景和設計目標

有一定經驗的開發者通常對文件管理相關的api應用或者底層邏輯都比較熟悉,但是關于文件管理服務的設計背景和設計目標可能了解得不那么清楚,本文旨在分享文件管理服務的設計背景及目標,方便廣大開發者更好地理解鴻蒙系統文件管理服務。 1 鴻蒙…

如何配置 Java 環境變量:設置 JAVA_HOME 和 PATH

目錄 一、什么是 Java 環境變量? 二、配置 Java 環境變量 1. 下載并安裝 JDK 2. 配置 JAVA_HOME Windows 系統 Linux / macOS 系統 3. 配置 PATH Windows 系統 Linux / macOS 系統 4. 驗證配置 三、常見問題與解決方案 1. 無法識別 java 或 javac 命令 …

Doris 數據庫外部表-JDBC 外表,Oracle to Doris

簡介 提供了 Doris 通過數據庫訪問的標準接口 (JDBC) 來訪問外部表,外部表省去了繁瑣的數據導入工作,讓 Doris 可以具有了訪問各式數據庫的能力,并借助 Doris 本身的 OLAP 的能力來解決外部表的數據分析問題: 支持各種數據源接入…

分布式 IO 模塊助力沖壓機械臂產線實現智能控制

在當今制造業蓬勃發展的浪潮中,沖壓機械臂產線的智能化控制已然成為提升生產效率、保障產品質量以及增強企業競爭力的關鍵所在。而分布式 IO 模塊的應用,正如同為這條產線注入了一股強大的智能動力,開啟了全新的高效生產篇章。 傳統挑戰 沖壓…

CSS系列(37)-- Overscroll Behavior詳解

前端技術探索系列:CSS Overscroll Behavior詳解 📱 致讀者:探索滾動交互的藝術 👋 前端開發者們, 今天我們將深入探討 CSS Overscroll Behavior,這個強大的滾動行為控制特性。 基礎概念 🚀 …

深度學習中的并行策略概述:4 Tensor Parallelism

深度學習中的并行策略概述:4 Tensor Parallelism 使用 PyTorch 實現 Tensor Parallelism 。首先定義了一個簡單的模型 SimpleModel,它包含兩個全連接層。然后,本文使用 torch.distributed.device_mesh 初始化了一個設備網格,這代…

企業銷售人員培訓系統|Java|SSM|VUE| 前后端分離

【技術棧】 1??:架構: B/S、MVC 2??:系統環境:Windowsh/Mac 3??:開發環境:IDEA、JDK1.8、Maven、Mysql5.7 4??:技術棧:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5??數據庫…

vue 本地自測iframe通訊

使用 postMessage API 來實現跨窗口(跨域)的消息傳遞。postMessage 允許你安全地發送消息到其他窗口,包括嵌套的 iframe,而不需要擔心同源策略的問題。 發送消息(父應用) 1. 父應用:發送消息給…

Linux:code:network:devinet_sysctl_forward;IN_DEV_FORWARD

文章目錄 簡介sysctl 設置使用,arp_process間接使用IN_DEV_RX_REDIRECTSdev_disable_lro簡介 最近在看Linux里的forwarding的功能。順便在這里總結一下。有些詳細代碼邏輯,如果可以記錄一下,會好一點。 sysctl 設置 這個函數在查看的時候需要注意的問題:變量名起的有點簡…

自然語言處理與知識圖譜的融合與應用

目錄 前言1. 知識圖譜與自然語言處理的關系1.1 知識圖譜的定義與特點1.2 自然語言處理的核心任務1.3 二者的互補性 2. NLP在知識圖譜構建中的應用2.1 信息抽取2.1.1 實體識別2.1.2 關系抽取2.1.3 屬性抽取 2.2 知識融合2.3 知識推理 3. NLP與知識圖譜融合的實際應用3.1 智能問答…

PHP 數組

PHP 數組 PHP 是一種流行的服務器端編程語言,它提供了強大的數組處理能力。PHP 數組是一種數據結構,用于存儲相同類型或不同類型的多個值。在 PHP 中,數組可以分為一維數組、二維數組和多維數組。本文將詳細介紹 PHP 數組的各種操作&#xf…