您好,登錄后才能下訂單哦!
在工作中作為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。
免責(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)容。