MySQL索引數據結構,mysql索引機制_mysql索引原理詳解

 2023-10-08 阅读 25 评论 0

摘要:預備知識什么是索引?上一篇中有詳細的介紹,可以過去看一下:什么是索引?MySQL索引數據結構?索引的本質:通過不斷地縮小想要獲取數據的范圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件,也就是說,有了這種

預備知識

什么是索引?

上一篇中有詳細的介紹,可以過去看一下:什么是索引?

MySQL索引數據結構?索引的本質:通過不斷地縮小想要獲取數據的范圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件,也就是說,有了這種索引機制,我們可以總是用同一種查找方式來鎖定數據。

磁盤中數據的存取

以機械硬盤來說,先了解幾個概念。

扇區:磁盤存儲的最小單位,扇區一般大小為512Byte。

mysql 聯合索引、磁盤塊:文件系統與磁盤交互的的最小單位(計算機系統讀寫磁盤的最小單位),一個磁盤塊由連續幾個(2^n)扇區組成,塊一般大小一般為4KB。

磁盤讀取數據:磁盤讀取數據靠的是機械運動,每次讀取數據花費的時間可以分為尋道時間、旋轉延遲、傳輸時間三個部分,尋道時間指的是磁臂移動到指定磁道所需要的時間,主流磁盤一般在5ms以下;旋轉延遲就是我們經常聽說的磁盤轉速,比如一個磁盤7200轉,表示每分鐘能轉7200次,也就是說1秒鐘能轉120次,旋轉延遲就是1/120/2 = 4.17ms;傳輸時間指的是從磁盤讀出或將數據寫入磁盤的時間,一般在零點幾毫秒,相對于前兩個時間可以忽略不計。那么訪問一次磁盤的時間,即一次磁盤IO的時間約等于5+4.17 = 9ms左右,聽起來還挺不錯的,但要知道一臺500 -MIPS的機器每秒可以執行5億條指令,因為指令依靠的是電的性質,換句話說執行一次IO的時間可以執行40萬條指令,數據庫動輒十萬百萬乃至千萬級數據,每次9毫秒的時間,顯然是個災難。

mysql中的頁

mysql中和磁盤交互的最小單位稱為頁,頁是mysql內部定義的一種數據結構,默認為16kb,相當于4個磁盤塊,也就是說mysql每次從磁盤中讀取一次數據是16KB,要么不讀取,要讀取就是16KB,此值可以修改的。

mysql索引使用。數據檢索過程

我們對數據存儲方式不做任何優化,直接將數據庫中表的記錄存儲在磁盤中,假如某個表只有一個字段,為int類型,int占用4個byte,每個磁盤塊可以存儲1000條記錄,100萬的記錄需要1000個磁盤塊,如果我們需要從這100萬記錄中檢索所需要的記錄,需要讀取1000個磁盤塊的數據(需要1000次io),每次io需要9ms,那么1000次需要9000ms=9s,100條數據隨便一個查詢就是9秒,這種情況我們是無法接受的,顯然是不行的。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/129127.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息