mysql 性能監(jiān)控

性能監(jiān)控

Schema與數(shù)據(jù)類型優(yōu)化

數(shù)據(jù)類型的優(yōu)化

更好的通常更好

簡單就好

整型字符操作代價更低,因為字符集和校對規(guī)則是字符比較比整型比較更復雜

使用 mysql 自建類型而不是字符串來存儲日期和時間

用整型存儲 IP 地址

盡量避免 null

如果查詢重包含可為 NULL 的列,對 mysql 來說很難優(yōu)化,因為可為 null 的列使得索引,索引統(tǒng)計和值比較都更加復雜,坦白來說,通常情況下 null 的列改為 not null 帶來的性能提升比較小,所以沒有比較要將所有的表的 schema 進行修改,但是應(yīng)該盡量避免設(shè)計成可為 null 的列

實際細則

整數(shù)類型:可以使用的幾種數(shù)據(jù)類型 :TINYINT,SMALINT,MEDIUMINT,INT,BIGINT 分別使用 8,16,32,64 位存儲空間,盡量使用滿足需求的最小數(shù)據(jù)類型

合理使用范式和反范式

范式

優(yōu)點:

當范式化的更新通常比反范式要快

當數(shù)據(jù)據(jù)好的范式化后,很少或者沒有重復的數(shù)據(jù)

范式化的數(shù)據(jù)比較小,可以放在內(nèi)存中,操作比較快

缺點:

通常需要進行關(guān)聯(lián)

反范式

優(yōu)點:

所有的數(shù)據(jù)都在同一張表中,可以避免關(guān)聯(lián)

可以設(shè)計有效的索引

缺點:

表格內(nèi)的冗余較多,刪除數(shù)據(jù)會造成有些表有用的信息丟失

字符與字符串類型

varchar 根據(jù)實際內(nèi)容長度保存數(shù)據(jù)

使用最小的符合需求的長度。

varchar(n) n小于等于 255 使用額外一個字節(jié)保存長度, n > 255 使用額外兩個字節(jié)保存長度

varchar(5) 與 varchar(255) 保存同樣的內(nèi)容,磁盤存儲空間相同,但內(nèi)存占用不同,是指定大小

varchar 在 mysql5.6 之前變更長度,或者從 255 以下變更到 255 以上時,都會導致鎖表

應(yīng)用場景

存儲長度波動較大的數(shù)據(jù),如:文章,有的會很短,有的會很長

字符串很少更新的場景,每次更新后都會重新算并使用額外存儲空間保存長度

適合保存多字節(jié)字符,如:漢字,特殊字符等。

char 固定長度的字符串

最大長度:255

會自動刪除末尾的空格

檢索效率,寫效率會比 varchar 高,以空間換時間

應(yīng)用場景

存儲長度波動不大的數(shù)據(jù),如:MD5 摘要

存儲短字符串、經(jīng)常更新的字符串

BLOD 和 TEXT 類型

MySQL 把每個 BLOB 和 TEXT 值當作一個個獨立的對象處理。

兩者都是為了存儲很大數(shù)據(jù)而設(shè)計的字符串類型,分別采用二進制和字符方式存儲

索引優(yōu)化

B 樹

B 樹特點:

所有鍵值分布在整顆樹中

搜索有可能在非葉子結(jié)點結(jié)束,在關(guān)鍵字全集內(nèi)做一次查找,性能逼近二分查找

每個節(jié)點最多擁有 m 個子樹

根節(jié)點至少有 2 個子樹

分支節(jié)點至少擁有 m/2 棵子樹(處根節(jié)點和葉子節(jié)點外都是分支節(jié)點)

所有葉子節(jié)點都在同一層,每個節(jié)點最多可以有 m - 1 個 key 并且以升序排列

B+ 樹

注意:在 B+Tree 上有兩個頭指針,一個指向根節(jié)點,另一個指向關(guān)鍵字最小的葉子節(jié)點,而且所有葉子節(jié)點(即數(shù)據(jù)節(jié)點)之間也是一種鏈式環(huán)結(jié)構(gòu)。因此可以對 B + Tree 進行兩種查找運算:一種是對于主鍵的范圍查找和分頁查找,另一種是從根節(jié)點開始,進行隨機查找.

數(shù)據(jù)庫引擎——InnoDB

注意:

InnoDB 是通過 B+Tree 結(jié)構(gòu)對主鍵創(chuàng)建索引,然后葉子節(jié)點中存儲記錄,如果沒有主鍵,那么會選擇唯一鍵,如果沒有唯一鍵,那么會生成一個 6 位的 row_id 來作為主鍵

如果創(chuàng)建索引的鍵是其他字段,那么在葉子節(jié)點中存儲的是該記錄的主鍵,然后再通過主鍵索引找到對應(yīng)的記錄,叫做回表

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容