在工做中做爲DBA的咱們,可能也會須要面對開發人員各類 Freestyle 的要求,可是他們是否知道在操做數據庫的時候,須要注意哪些事項呢?
html
今兒帶着你們簡單聊聊 MySQL 數據庫的開發行爲規範,十大鐵的紀律。對DBA老鐵們是一種幫助,對開發人員也是一種學習。mysql
1. 建立的表要使用 innodb 存儲引擎表面試
如今基本上大部分業務都是 innodb 存儲引擎,MySQL 8.0 開始,完全再也不使用 myisam。每張表都要包含一個自增的主鍵 id。sql
2. 數據類型的選擇上,要秉着越簡單越好,越小越好的原則。mongodb
建議使用 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 來代替。ide
也不建議使用大數據類型的字段如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。