規則

守望567發表於2019-07-02

一、建表規則

    1.表必須有create_time和update_time欄位,並且這兩列上都有索引 

    2.auto_increment 預設情況下為1開始 

    3. 預設字符集為utf8/utf8mb4,不需要指定表或者列的字元和校驗規則

        bad case : create table table_name 

        (name varchar(20) charaset utf8 collate utf8_general_ci not null default ‘’ comment ''

             ) DEFAULT CHARSET=utf8 

        good case : create table table_name 

             (name varchar(20) not null default comment '')

    4.表和列的註釋要有表和列的作用,誰建立的,建立時間。 建立時間必須為當天時間,不要從沙盒匯出來就複製到tb上。

        例如:

            create table table_name 

               (name varchar(20) not null default ‘’ comment '名字|張三|20180613'

               ) comment = '表是幹什麼的|誰建立的|當天的日期' 

    5.列必須明確指定為not null,不允許出現default null 的字樣,看上面的例子。

        1)NULL的列使用索引,索引統計,值都更加複雜,MySQL更難優化

        2)NULL需要更多的儲存空間

        3)NULL只能採用IS NULL或者IS NOT NULL

    6.必須有主鍵自增列最好用bigint型別 

          1)int有負號最高2147483647、無負號最高4294967295   , bigint 有負號9223372036854775807 無負號18446744073709551615

          2)無主鍵的大表在row模式下做delete操作偶發從庫會夯住

    7.精確度要求高的要用decimal 

    8.欄位型別的長度滿足就好不要寫的特長

         bad case: name varchar(100)

         good case:name varchar(10) 

    9.正常表的列個數不超過30 

    10.大欄位列(text,blob)儘量單獨建個表存放

    11.禁止使用外來鍵控制關係,由程式實現

          影響效能,易造成瓶頸

    12.建議使用TINYINT來代替ENUM

         ENUM增加選項是要做ddl操作。

    13.關鍵的業務環節,需要有單獨的時間和描述欄位,不能複用。

二、索引規則

    1.單張表索引數量建議控制在5個以內

        1)多了會造成資料庫不能選擇正確的索引

    2.組合索引欄位數不建議超過5個

        1)如果太多索引失效

    3.不要在頻繁更新的欄位上建立索引 

    4.聯合索引最左字首原則,避免重複建設索引

三、命名規則

    1.使用者名稱不得超過16個字元 

    2.表名列名要清晰,讓人一看就明白 

    3.索引名字加個字首idx_,唯一索引uniq_

        idx_create_time, uniq_create_time

    4.備份表的名字在表名後面加上日期和名字

        goods_order---->goods_order_20180613_majianli

四、sql規則

    1.禁止使用select * 需要哪些欄位寫哪些欄位 

    2.JOIN關聯查詢時要確保關聯條件的型別是一致的,並且兩列都是有索引的

  left join 的關係是N:1

        join的關係是N:N 

    3.避免隱式型別轉

        phone varchar(20)

        bad case : select name from tabe_name where phone = 1366666666;

        good case : select name from tabe_name where phone = '1366666666';

    4.不要在索引列做計算和加函式使用

    5.禁止使用select * 查詢

        *會增加cpu、io、記憶體、帶的消耗

        如有覆蓋索引*不會使用到

    6.insert操作必須指定欄位

        表結構有變動時不會有影響

    7.合理使用子查詢,不要太相信網上傳言MySQL的子查詢不好。

    8.學會看執行計劃,不是走索引了就可以的。

        這個很重要 

    9.一直都在說拒絕3B

        big sql

        big transation

        big batch

        及其複雜的sql放在對應功能的資料庫上做運算 

    10.新增列索引等

          新增多個列/索引 對應一個表時用一個alter語句

          alter  table_name add name1 。。。。。。

          alter  table_name add name2 。。。。。。

          alter  table_name add name3 。。。。。。

          改成:

          alter  table_name add name1 。。。。,add name2 。。。。,add name3 。。。。;

四、其他規則

    1.引擎使用innodb 

    2.字元使用utf8或者utf8mb4 

    3.禁止使用儲存過程,檢視,觸發器等 

    4.不使用的rds自建資料庫的,禁止使用yum安裝mysql。要和線上版本一致。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26909803/viewspace-2649305/,如需轉載,請註明出處,否則將追究法律責任。