mysql 表字段設計與磁碟io的關係

2021-08-01 09:10:56 字數 965 閱讀 6266

對於管理磁碟,分磁碟面、磁頭、磁軌、柱面和扇區。

磁碟面:磁碟是由一疊磁碟面組成,見下左圖。

磁頭(heads):每個磁頭對應乙個磁碟面,負責該磁碟面上的資料的讀寫。

磁軌(track):每個盤面會圍繞圓心劃分出多個同心圓圈,每個圓圈叫做乙個磁軌。

柱面(cylinders):所有碟片上的同一位置的磁軌組成的立體叫做乙個柱面。

扇區(sector):以磁軌為單位管理磁碟仍然太大,所以計算機前輩們又把每個磁軌劃分出了多個扇區,見下圖:

第一步,首先是磁頭徑向移動來尋找資料所在的磁軌。這部分時間叫尋道時間。

第二步,找到目標磁軌後通過盤面旋轉,將目標扇區移動到磁頭的正下方。

第三步,向目標扇區讀取或者寫入資料。到此為止,一次磁碟io完成。

故:單次磁碟io時間 = 尋道時間 + 旋轉延遲 + 訪問時間。

比如: 對於旋轉延時,假如伺服器上經常使用的是1w轉/分鐘的磁碟,每旋轉一周所需的時間為60*1000/10000=6ms,故其旋轉延遲為(0-6ms)。對於訪問時間,一般耗時較短,為零點幾ms。對於尋道時間,現代磁碟大概在3-15ms,其中尋道時間大小主要受磁頭當前所在位置和目標磁軌所在位置相對距離的影響。作業系統通過按磁軌對應的柱面劃分分割槽,來降低磁碟io所花費的的尋道時間 ,進而提高磁碟的讀寫效能。

由於mysql資料庫是基於行(row)儲存的資料庫,而資料庫操作 io 的時候是以 page(block)的方式,也就是說,如果我們每條記錄所占用的空間量減小,就會使每個page中可存放的資料行數增大,那麼每次 io 可訪問的行數也就增多了。反過來說,處理相同行數的資料,需要訪問的 page 就會減少,也就是 io 操作次數降低,直接提公升效能。此外,由於我們的記憶體是有限的,增加每個page中存放的資料行數,就等於增加每個記憶體塊的快取資料量,同時還會提公升記憶體換中資料命中的機率,也就是快取命中率。

所以對於mysql欄位的型別選擇很重要,在滿足的前提下,保證字段型別所佔的儲存空間盡量小哈,這樣可以降低磁碟io,提高查詢速度!

mysql表字段設計總結

mysql的效能優化,涉及到很多知識,而良好的表設計是提公升效能的基礎,特別是針對於大表而言,好的設計對效能提公升很大,以下是設計方面的幾個優化點 1.盡量避免null列 2.盡量使用更簡單的資料型別簡單意味著更低的磁碟儲存,記憶體占用和cpu效能開銷,特別是大資料量高併發的情況下,對效能影響比較大...

MySQL表字段操作

語法 新增到末尾 alter table 表名 add 欄位名,資料型別 新增到開始 alter table 表名 add 欄位名 資料型別 first 新增到制定位置 alter table 表名 add 欄位名 after 欄位名 會新增在這個欄位名的下面 刪除字段 alter table 表名...

mysql與oracle 表字段定義比較

mysql與oracle 表字段定義比較 說明mysql oracle varchar 變長字串 varchar 0 65535 定義長度預設按字元長度計算,如果是gbk編碼的漢字將占用2個位元組 varchar2 1 4000 varchar是varchar2的同義詞 定義預設按位元組長度計算 t...