MySQL 簡記

MySQL 簡記

mysql中的數據存儲的結構是B+樹

  • 其與B樹的相同點是,B+樹一個節點也可以存放多條數據,并且從左到右依次增大;
  • 不同點是,B+樹的葉子結點之間也能相互連接。那么實際上是采取利用空間換區時間的策略。

那么B+樹的樹結構like this:

請添加圖片描述

然后mysql中的數據存儲是這樣的:

其實在mysql里面自增主鍵是要比uuid要好的,原因是因為,當每次插入數據的時候,直接向下、向下一頁去插入就好了;如果說不是自增主鍵,那么當一頁數據存滿,新插入的數據主鍵大小應該是在舊的頁上時,就需要挪動原始的舊數據的最后一個,插入到新的一頁,然后將新插入的數據插入到舊的也里面中,這伴隨著系統的消耗。

可以回答為什么innodb中使用B+樹來存儲,用空間換時間

在這里插入圖片描述
在這里插入圖片描述

就是用空間換取時間的效率,假設一頁能存四條數據,那么每一個頁都有一個頁目錄,頁目錄存的是主鍵的索引,每隔幾個一個索引,在利用索引查找的時候,先查找頁目錄,就能快速遍歷一頁的數據,倘若目標主鍵在這一頁的某兩個主鍵索引之中,再從頁目錄那個對應的索引所給的地址跑到用戶數據區域毒地贏得數據,再從中間開始遍歷數據區域,直到找到目標數據。這個時候已經離目標很近的,就很快能走完。

當有很多很多頁的時候,就有一個頭頁,當有很多很多頭頁,就有一個更高的頭頁來建立索引。因此當查詢一個很大的索引例如600000時,不需要從頭數據遍歷到尾,只需要遍歷最頭的頁就清楚了。

注:超級頁就是頭頁,一般兩層的B+樹就好了

innodb是如何支持范圍查找能走索引的?

索引的時候,如果范圍查找select * from table1 where a = 6;,假設a是主鍵,那么走的是主鍵索引,從頭頁開始從上往下找;如果我搜索的不是主鍵,而是b= 6,那么就是全表掃描,走的是最下面這一層的頁,一頁一頁的走查找b.

innodb里面的一頁是多大?

在數據庫中,一頁是16dkB,計算機操作系統里面一頁時4KB大小。

那么高度為2的B+樹能存多少條數據?

一條數據是包含一個int值和一個指針,那么就是4B+6B = 10B,一個頭頁里面能存A=16KB/10B個頁,然后一個頁里面用B=16KB/一條數據,最后存的數據量就是A*B。

為什么遵循最左前綴原則才能利用索引?

因為創建索引的時候,假如有5個字段,第一個為主鍵,創建中間的三個為一個復合索引,這個其實也就是非聚族索引的一種,它會構建一個B+樹,那么樹的排列,數值的分布都是按照:比較第一個字段,如果第一個字段相同再比較第二個字段,其次再比較第三個字段的形式進行構建樹的,所以必須要遵循最左前綴原則才能利用索引。那么找到了對應的索引之后會進行回表查詢全字段的值。如何能夠回表到對應的數據?是索引里面存了主鍵的值,那么通過主鍵就可以回表找到信息返回

覆蓋索引和索引掃描的底層原理

覆蓋索引就是,復合索引里面包含了要查找的字段,那么這個時候就不用回表查看全字段數據,直接走索引找到需要的索引的字段就好了。

索引掃描是,相比全表掃描,索引掃描里包含了要查找的對應的字段,那么一頁里面包含的數據就會更多,查找的就會更快,所以這個時候,用索引反而更快一些。

mysql里面類型轉換需要注意的

一般是char型的會轉換為int型的,它會直接把字符轉換為數字0

所以explain select * from table1 where a = 0,如果a是一個int類型的字段,而數據里面有個字符‘c’的話,那么會查找到它,‘c’->0

那么如果是a字段里面存了字符’1’,那么會直接轉成數字’1’

什么情況下會導致索引失效

當直接對字段進行操作,比方說搜索a+1 =1這樣的情況,那么對于數據庫引擎來說,都要先對內存里面的構造的索引B+樹進行更改,例如字段類型是varchar的,對他加了1,那么需要先把所有的字段全部都轉換成數字(字符字母轉換成0,數字‘1’轉換成1),然后再加上1,然后再進行索引查找。這以過程耗費的資源是很大的,

而且還可能會引發問題,可能會破壞B+樹的順序。

那么:一旦對字段進行了操作,那就會導致索引失效,走不了索引

mysql慢查詢如何優化

  1. 檢查是否走了索引,如果沒有則優化其利用索引
  2. 檢查所以利用的索引,是否是最優索引
  3. 檢查所查字段是否都是必須的,是否查詢了過多字段,或者多余數據
  4. 檢查表中數據是否過多
    索引
  5. 檢查所以利用的索引,是否是最優索引
  6. 檢查所查字段是否都是必須的,是否查詢了過多字段,或者多余數據
  7. 檢查表中數據是否過多
  8. 檢查數據庫實例所在機器的性能配置,

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

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

相關文章

十七、實戰開發 uni-app x 項目(仿京東)- 后端指南

前面我們已經用uniappx進行了前端實戰學習 一、實戰 開發uni-app x項目(仿京東)-規劃-CSDN博客 二、實戰 開發uni-app x項目(仿京東)-項目搭建-CSDN博客 三、實戰開發 uni-app x 項目(仿京東)- 技術選型-CSDN博客 四、實戰開發 uni-app x 項目(仿京東)- 頁面設計-C…

Infura 簡介

文章目錄 Infura 簡介Infura 的主要功能Infura 的替代方案(類似服務)AlchemyQuickNodeAnkrMoralisPocket Network 什么時候選擇 Infura? Infura 簡介 Infura 是一個 區塊鏈基礎設施即服務(BaaS, Blockchain as a Service&#xf…

TouchSocket TcpService:構建高性能Tcp服務的終極利器

這里寫目錄標題 TouchSocket TCPService:構建高性能TCP服務的終極利器引言TCPService核心特性快速入門:5分鐘搭建TCP服務1. 創建基礎TCP服務2. 自定義插件處理數據 高級用法實戰1. 客戶端連接管理 性能與穩定性保障示例與源碼結語 TouchSocket TCPServic…

Android Fresco 框架緩存模塊源碼深度剖析(二)

一、引言 在 Android 應用開發中,圖片加載和處理是常見且重要的功能。頻繁的圖片加載不僅會消耗大量的網絡流量,還會影響應用的性能和響應速度。因此,有效的緩存機制對于提升圖片加載效率和用戶體驗至關重要。Fresco 是 Facebook 開源的一款…

springboot使用163發送自定義html格式的郵件

springboot使用163發送html格式的郵件 效果: 下面直接開始教學 注冊郵箱,生成授權碼 獲取163郵箱的授權碼,可以按照以下步驟操作: 登錄163郵箱 打開瀏覽器,訪問 163郵箱登錄頁面。 使用你的郵箱賬號和密碼登錄。進入郵箱設置 登…

【Kafka】深入了解Kafka

集群的成員關系 Kafka使用Zookeeper維護集群的成員信息。 每一個broker都有一個唯一的標識,這個標識可以在配置文件中指定,也可以自動生成。當broker在啟動時通過創建Zookeeper的臨時節點把自己的ID注冊到Zookeeper中。broker、控制器和其他一些動態系…

C#使用SnsPictureBox.dll繪制點,線段、圓、折線、多邊形、測量尺等多種圖形。

CSDN下載地址:https://download.csdn.net/download/sns1991sns/87726867 gitee下載地址:https://gitee.com/linsns/SnsPictrueBox 支持2種繪制方式:響應式和等待式。 一、使用響應式繪制圖形 1、在窗口構造函數里添加繪制圖形的完成響應函數 public…

Hugging Face預訓練GPT微調ChatGPT(微調入門!新手友好!)

Hugging Face預訓練GPT微調ChatGPT(微調入門!新手友好!) 在實戰中,?多數情況下都不需要從0開始訓練模型,?是使?“??”或者其他研究者開源的已經訓練好的?模型。 在各種?模型開源庫中,最…

Redis BitMap 用戶簽到

Redis Bitmap Bitmap(位圖)是 Redis 提供的一種用于處理二進制位(bit)的特殊數據結構,它基于 String 類型,每個 bit 代表一個布爾值(0 或 1),可以用于存儲大規模的二值狀…

Spring Boot 3 新特性實戰:從理論到實踐

引言 Spring Boot 自發布以來,憑借其簡潔的配置和強大的功能,迅速成為 Java 開發者的首選框架。隨著 Spring Boot 3 的發布,開發者們迎來了更多令人興奮的新特性。本文將深入探討 Spring Boot 3 的新特性,并通過實戰示例展示如何…

Nodejs使用redis

框架:koa,通過koa-generator創建 redis: 本地搭建,使用默認帳號,安裝說明地址以及默認啟動設置:https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/ 中間件&#x…

調研報告:Hadoop 3.x Ozone 全景解析

Ozone 是 Hadoop 的分布式對象存儲系統,具有易擴展和冗余存儲的特點。 Ozone 不僅能存儲數十億個不同大小的對象,還支持在容器化環境(比如 Kubernetes)中運行。 Apache Spark、Hive 和 YARN 等應用無需任何修改即可使用 Ozone。Ozone 提供了 Java API、S3 接口和命令行接口…

AI學習——卷積神經網絡(CNN)入門

作為人類,我們天生擅長“看”東西:一眼就能認出貓狗、分辨紅綠燈、讀懂朋友的表情……但計算機的“眼睛”最初是一片空白。直到卷積神經網絡(CNN)?的出現,計算機才真正開始理解圖像。今天,我們就用最通俗的…

除自身以外數組的乘積——面試經典150題(力扣)

題目 給你一個整數數組 nums,返回 數組 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。 請 不要使用除法,且在 O(n) 時…

?算法OJ?二叉樹的前序遍歷【樹的遍歷】(C++實現)Binary Tree Preorder Traversal

?算法OJ?二叉樹的中序遍歷【樹的遍歷】(C實現)Binary Tree Inorder Traversal Given the root of a binary tree, return the preorder traversal of its nodes’ values. Example 1: Input: root [1,null,2,3] Output: [1,2,3]Explanation: Exam…

計算機二級MS之Excel

聲明:跟著大貓和小黑學習隨便記下一些筆記供大家參考,二級考試之前將持續更新,希望大家二級都能輕輕松松過啦,過了二級的大神也可以在評論區留言給點建議,感謝大家!! 文章目錄 考題難點&#x…

【Linux】VMware Workstation Pro 17 安裝教程

目錄 安裝 VMware Workstation Pro 17 一、CDS Repository 獲取安裝包 二、網盤獲取安裝包 三、Broadcom官方獲取安裝包 后續安裝過程沒啥特殊要求 安裝 VMware Workstation Pro 17 目前VMware Workstation pro 17已經對個人用戶免費開放使用。 Broadcom官網地址&#x…

如何在云端平臺上建立 30,000 名用戶的網頁 MMO游戲環境-2 (服務器)

接續上一篇「如何在云端平臺上建立 30,000 名用戶的網頁 MMO游戲環境」,接下來討論模擬連結上的問題。 最初計劃使用35臺伺服器來完成這個實驗,希望能夠有大量的用戶連接,以驗證真實的連接狀況。然而,我們高估了這方面&#xff0c…

架構設計的靈魂交響曲:系統設計各維度的深度解析與實戰指南

引言: 系統設計的背景與重要性 在快速變化的技術環境中,數字化轉型成為企業生存與發展的核心驅動力。系統設計能力不僅是技術團隊的核心競爭力,也是推動業務創新和提升整體效率的關鍵因素。根據Gartner的研究,超過70%的數字化轉型項目未能實…

C語言指針(詳細總結)

目錄 1.初始C指針 幾個重要的概念: 指針的加減 &與* 二級指針 2.指針與數組 指針數組 數組指針變量 一維數組與二維數組傳參的本質 ?編輯?編輯 ?編輯 3.指針與函數 函數指針數組 4.指針與結構體 5.野指針以及常見的內存管理錯誤 常見的內存錯…