溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

想要Freestyle?先要遵守 MySQL 這十大鐵律!

發(fā)布時間:2020-06-19 14:09:31 來源:網(wǎng)絡(luò) 閱讀:30429 作者:張甦 欄目:MySQL數(shù)據(jù)庫

在工作中作為DBA的我們,可能也會需要面對開發(fā)人員各種 Freestyle 的要求,但是他們是否知道在操作數(shù)據(jù)庫的時候,需要注意哪些事項(xiàng)呢?


今兒帶著大家簡單聊聊 MySQL 數(shù)據(jù)庫的開發(fā)行為規(guī)范,十大鐵的紀(jì)律。對DBA老鐵們是一種幫助,對開發(fā)人員也是一種學(xué)習(xí)。


1. 創(chuàng)建的表要使用 innodb 存儲引擎表

現(xiàn)在基本上大部分業(yè)務(wù)都是 innodb 存儲引擎,MySQL 8.0 開始,徹底不再使用 myisam。每張表都要包含一個自增的主鍵 id。


2. 數(shù)據(jù)類型的選擇上,要秉著越簡單越好,越小越好的原則。

建議使用 int 來存儲 ipv4 的類型,可以通過函數(shù)轉(zhuǎn)換。金錢類的字段也可以存儲為 int 類型,用分做單位就可以了。

時間類型可以采用 datetime,它比 tiemstamp 可用范圍大,存儲空間也從原來的 8 字節(jié),降到了 5 字節(jié),性能上也不錯。

mysql> select inet_aton('192.168.56.132');
+-----------------------------+
| inet_aton('192.168.56.132') |
+-----------------------------+
|          3232249988 | 
+-----------------------------+

mysql> select inet_ntoa(3232249988);
+-----------------------+
| inet_ntoa(3232249988) |
+-----------------------+
| 192.168.56.132        | 
+-----------------------+
1 row in set (0.00 sec)


3. 庫名、表名、字段名必須使用小寫字母,采用“_“分割

MySQL 數(shù)據(jù)庫中,通過參數(shù) lower_case_table_names 來區(qū)分表名的大小寫 默認(rèn)為 0,代表大小寫敏感。如果是 1,大小寫不敏感,以小寫存儲。


4. 不建議使用 ENUM 類型,使用 TINYINT 來代替。

也不建議使用大數(shù)據(jù)類型的字段如text或者blob出現(xiàn)在業(yè)務(wù)表中。


5. 表字符集使用 utf8,必要時可申請使用 utf8mb4 字符集。

它的通用性比 gbk,latin1 都要好。utf8 字符集存儲漢字占用 3 個字節(jié),如果遇到表情存儲的要求,就可以使用 utf8mb4


6. select 查詢表的時候只需要獲取必要的字段,避免使用 select *。

這樣可以減少網(wǎng)絡(luò)帶寬消耗,還有可能利用到覆蓋索引


7. 所有字段定義中,默認(rèn)都加上 not null 約束,避免出現(xiàn) null。

在對該字段進(jìn)行 select count() 統(tǒng)計計數(shù)時,可以讓統(tǒng)計結(jié)果更準(zhǔn)確,因?yàn)橹禐?null 的數(shù)據(jù),不會被計算進(jìn)去的。


8. 創(chuàng)建索引的時候不要在低基數(shù)列上建立索引,像 sex、status 這種字段上面。

要通過索引的選擇性來判斷 select count(distinct col1)/count(*) from table_name; 越接近 1,證明選擇性越高,越適合創(chuàng)建索引。一般情況下,單表索引數(shù)量不要超過 4-5 個范圍。


9. SQL語句中,盡量避免出現(xiàn) or 子句

這種判斷的子句可以讓程序自行完成,不要交給數(shù)據(jù)庫判斷。也要避免使用 union,盡量采用 union all,減少了去重和排序的工作。


10. 時時做好監(jiān)控工作,經(jīng)常對線上 sql 語句,進(jìn)行在線捕獲進(jìn)行分析。

可以利用 percona-toolkit 工具。


目前先寫這么多,歡迎大家及時補(bǔ)充,其實(shí)好多工作都需要 DBA 和開發(fā)人員密切配合。新的業(yè)務(wù)要上線,DBA 就要參與到業(yè)務(wù)中,配合開發(fā)一起建表建模。我們只有一個目的,就是更舒服得工作,掙更多的錢,那為啥不能改變一下我們不好的工作習(xí)慣呢。工作中不是你想怎么著,就怎么著!繼續(xù)努力吧!




更多精彩文章:

MySQL數(shù)據(jù)庫“十宗罪”(十大經(jīng)典錯誤案例)

數(shù)據(jù)庫優(yōu)化之降龍十八掌




我的在線課程:MySQL 體系結(jié)構(gòu)深入剖析及實(shí)戰(zhàn) DBA 視頻課程

課程目標(biāo)

通過對 MySQL 體系結(jié)構(gòu)深入剖析講解,配合生產(chǎn)環(huán)境備份恢復(fù),主從復(fù)制,高可用集群架構(gòu)和優(yōu)化等實(shí)戰(zhàn)演練,讓同學(xué)們可以對 MySQL 數(shù)據(jù)庫有個由淺到深的認(rèn)識。最后的課程部分還會對面試題總結(jié)進(jìn)行講解,有利于同學(xué)們可以找到理想的 MySQL DBA 的工作。

適用人群

剛接觸MySQL數(shù)據(jù)庫的同學(xué),有一定運(yùn)維經(jīng)驗(yàn)的運(yùn)維人員,想提高自己MySQL數(shù)據(jù)庫水平的DBA。



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI