在工作中作爲DBA的我們,可能也會需要面對開發人員各種 Freestyle 的要求,但是他們是否知道在操作數據庫的時候,需要注意哪些事項呢?
今兒帶着大家簡單聊聊 MySQL 數據庫的開發行爲規範,十大鐵的紀律。對DBA老鐵們是一種幫助,對開發人員也是一種學習。
1. 創建的表要使用 innodb 存儲引擎表
現在基本上大部分業務都是 innodb 存儲引擎,MySQL 8.0 開始,徹底不再使用 myisam。每張表都要包含一個自增的主鍵 id。
2. 數據類型的選擇上,要秉着越簡單越好,越小越好的原則。
建議使用 int 來存儲 ipv4 的類型,可以通過函數轉換。金錢類的字段也可以存儲爲 int 類型,用分做單位就可以了。
時間類型可以採用 datetime,它比 tiemstamp 可用範圍大,存儲空間也從原來的 8 字節,降到了 5 字節,性能上也不錯。
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 數據庫中,通過參數 lower_case_table_names 來區分表名的大小寫 默認爲 0,代表大小寫敏感。如果是 1,大小寫不敏感,以小寫存儲。
4. 不建議使用 ENUM 類型,使用 TINYINT 來代替。
也不建議使用大數據類型的字段如text或者blob出現在業務表中。
5. 表字符集使用 utf8,必要時可申請使用 utf8mb4 字符集。
它的通用性比 gbk,latin1 都要好。utf8 字符集存儲漢字佔用 3 個字節,如果遇到表情存儲的要求,就可以使用 utf8mb4
6. select 查詢表的時候只需要獲取必要的字段,避免使用 select *。
這樣可以減少網絡帶寬消耗,還有可能利用到覆蓋索引
7. 所有字段定義中,默認都加上 not null 約束,避免出現 null。
在對該字段進行 select count() 統計計數時,可以讓統計結果更準確,因爲值爲 null 的數據,不會被計算進去的。
8. 創建索引的時候不要在低基數列上建立索引,像 sex、status 這種字段上面。
要通過索引的選擇性來判斷 select count(distinct col1)/count(*) from table_name; 越接近 1,證明選擇性越高,越適合創建索引。一般情況下,單表索引數量不要超過 4-5 個範圍。
9. SQL語句中,儘量避免出現 or 子句
這種判斷的子句可以讓程序自行完成,不要交給數據庫判斷。也要避免使用 union,儘量採用 union all,減少了去重和排序的工作。
10. 時時做好監控工作,經常對線上 sql 語句,進行在線捕獲進行分析。
可以利用 percona-toolkit 工具。
目前先寫這麼多,歡迎大家及時補充,其實好多工作都需要 DBA 和開發人員密切配合。新的業務要上線,DBA 就要參與到業務中,配合開發一起建表建模。我們只有一個目的,就是更舒服得工作,掙更多的錢,那爲啥不能改變一下我們不好的工作習慣呢。工作中不是你想怎麼着,就怎麼着!繼續努力吧!
更多精彩文章:
我的在線課程:《MySQL 體系結構深入剖析及實戰 DBA 視頻課程》
課程目標
通過對 MySQL 體系結構深入剖析講解,配合生產環境備份恢復,主從複製,高可用集羣架構和優化等實戰演練,讓同學們可以對 MySQL 數據庫有個由淺到深的認識。最後的課程部分還會對面試題總結進行講解,有利於同學們可以找到理想的 MySQL DBA 的工作。
適用人羣
剛接觸MySQL數據庫的同學,有一定運維經驗的運維人員,想提高自己MySQL數據庫水平的DBA。