溫馨提示×

溫馨提示×

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

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

MySQL開發規范有哪些

發布時間:2020-12-22 10:56:02 來源:億速云 閱讀:216 作者:小新 欄目:MySQL數據庫

這篇文章將為大家詳細講解有關MySQL開發規范有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

基礎規范

  • 使用innodb存儲引擎

  • 表字符集使用utf-8

  • 所有表添加注釋

  • 單表數據量建議控制在5000W以內

  • 不再數據庫中存儲圖、文件等大數據

  • 禁止在線上做數據庫壓力測試

  • 禁止測試、開發環境直連數據庫

命名規范

  • 庫名表名字段名必須有固定的命名長度,12個字符以內

  • 庫名、表名、字段名禁止超過32個字符。須見名之意

  • 庫名、表名、字段名禁止使用MySQL保留字

  • 臨時庫、表名必須以tmp為前綴,并以日期為后綴

  • 備份庫、表必須以bak為前綴,并以日期為后綴

庫、表、字段開發設計規范

  • 禁止使用分區表

  • 拆分大字段和翻身顧問頻率低的字段,分離冷熱數據

  • 用HASH進散表,表名后綴使進制數,下標從0開始

  • 按日期時間分表需符合YYYY[MM][DD][HH]格式

  • 采用合適的分庫分表策略。例如千庫十表、十庫百表等

  • 盡可能不適用text、blob類型

  • 用decimal代替float和double存儲精確浮點數

  • 越簡單越好:將字符轉換為數字、使用tinyint來代替enum類型

  • 所有字段均為not null

  • 使用unsigned存儲非負數

  • int類型固定占有4字節存儲

  • 使用timestamp存儲時間

  • 使用int unsigned存儲ipv4

  • 使用varbinary存儲大小寫敏感的變長字符串

  • 禁止在數據庫中存儲明文密碼,把密碼加密后存儲

  • 用好數值類型字段


    類型

    字節

    最小值

    最大值





    tinyint

    1

    -128

    127

    smallint

    2

    -32768

    32767

    mediumint

    3

    -8388608

    8388607

    int

    4

    -2147483648

    2147483647

    bigint

    8

    -9223372036854775808

    9223372036854775807

    如果數值字段沒有那么大,就不要用bigint

  • 存儲ip最好用int存儲而非char(15)

  • 不允許使用enum

  • 避免使用null字段

    null字段很難查詢一花,null字段的索引需要額外空間,null字段的復合索引無效。

索引規范

  • 單個表中的索引數量不超過5個

  • 單個索引中的字段數不超過5個

  • 對字符串使用前綴索引,前綴索引長度不超過8個字符

  • 建議優先考慮前綴索引,必要可添加偽列并建立索引

  • 表必須有主鍵

  • 不使用更新頻繁的列作為主鍵

  • 盡量不選擇字符串列作為主鍵

  • 不使用uuid md5 hash這些作為主鍵-太離散

  • 默認使非空的唯一鍵作為主鍵

  • 建議選擇自增或發號器

  • 重要的SQL必須必須被索引,比如update、delete語句的where條件列、order by、group by、distinct的字段

  • 多表join的字段注意

1.區分度最大的字段放在前面
2.核SQL優先考慮覆蓋索引
3.避免冗余和重復索引
4.索引要綜合評估數據密度和分布以及考慮查詢和更新比例

  • 索引禁忌

1.不在低基數列上建立索引、例如性別
2.不在索引列記性數學運算和函數運算

  • 盡量不使用外鍵

1.外鍵用來保護參照完整性,可以業務端實現
2.對父表和字表的操作會互相影響,降低可用性

  • 索引命名

1.非唯一索引必須以 inx_字段1_字段22.唯一索引必須以 uniq_字段1_字段2

  • 索引字段的默認值不能為空。null非常影響索引的查詢效率。

  • 反復查看和表相關的SQL,符合最左前綴的特點建立索引。多條字段重復的索引,要修改語句條件字段的順序,為其建立一條聯合索引,減少索引數量。

  • 能使用唯一索引就使用唯一索引

  • 研發要經常使用explain,如果發現索引選擇性差,必須讓他們學會使用hint。

SQL規范

  • SQL語句盡可能簡單

  • 事物要簡單,整個事物的時間產生過度不要太長

  • 避免使用觸發器、函數、存儲過程

  • 降低業務耦合度,為sacle out,sharding留有余地

  • 避免在數據庫中進行數學運算,mysql不擅長數學運算和邏輯判斷

  • 不要用selecy *,查詢那幾個字段就select那幾個字段

  • sql中使用or的改寫成in,or的效率沒有in的效率高

  • in里面數字的個數建議1000以內

  • limit分頁注意效率。limit越大,效率越低。

  • 使用union all替代union

  • 避免使大表join

  • 使用group bu分組、自動排序

  • 對數據的更新要打散后批量更新,不要一次更新太多數據

  • 減少和數據庫的交互次數

  • 注意使用性能分析工具

  • SQL語句要求所有研發,SQL關鍵字全部大寫,每個詞只允許一個空格

  • SQL語句不可以出現隱式轉換

  • 能不用not in就不用

  • 禁止使用前綴是%的like

  • 不使用負向查詢,如 not in、not like

  • 禁止在數據庫總跑大查詢

  • 使預編譯語句,只傳參數,比傳遞SQL語句更高效。降低SQL注入。

  • 禁止使order by rand

  • 禁止單條SQL語句同時更新多個表

流程規范

  • 所有的建表操作需要提前告知該表涉及的查詢SQL

  • 所有的建表需要確定建立那些索引后才可以建表上線

  • 所有的改表結構、加索引操作都需要涉及到所該表的查詢SQL發出來通知DBA等相關人員

  • 在新建表加字段之前,要求研發至少提前3天郵件出來,給dba門評估、優化和審核

  • 批量導入、導出數據必須提前通知DBA協助觀察

  • 禁止線上從庫執行后端管理和統計類查詢

  • 禁止super權限的應用程序賬戶存在

  • 不再業務高峰期批量更新、查詢數據庫

關于MySQL開發規范有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女