91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

MySQL開發設計規范有哪些

發布時間:2021-06-24 15:06:51 來源:億速云 閱讀:136 作者:Leah 欄目:MySQL數據庫

這期內容當中小編將會給大家帶來有關MySQL開發設計規范有哪些,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

命名規范

l  庫名、表名、字段名禁止超過32個字符。

l  所有數據庫對象名稱必須使用小寫字母并用下劃線分割

不同的數據庫名  DbName dbname

不同的表名  Table table tabLe

l  所有數據庫對象名稱(庫名、表名、字段名)禁止使用MySQL保留關鍵字

select id,username,from,age from tb_user

有兩個from,MySQL并不清楚這兩個from有什么區別,執行上面會報錯

select id,username,`from`,age from tb_user 正確

l  數據庫對象的命名要能做到見名識義,并且最好不要超過32個字符

例如:用戶賬號表  user_account

     用戶數據庫  aisino_userdb

l  臨時庫表必須以tmp_開頭并以日期為后綴, 例如tmp_test01_20161218

l   備份庫備份表必須以bak_開頭并以日期戳為后綴, 例如bak_test01_20161218

l  所有存儲相同數據的列名和列類型必須一致

CREATE TABLE customer_inf(

customer_inf id int unsigned auto increment not null comment '自增id',

customer_id int unsigned not null comment 'customer_login表的自增id,

.........................................

CREATE TABLE order_master(

order_id id int unsigned not null auto increment comment '訂單ID',

customer_id int unsigned not null comment '下單人ID',

.........................................

基礎規范

l  使用INNODB存儲引擎

支持事務,行級鎖,更好的恢復性,高并發下性能更好

l  INNODB表必須有主鍵列,使用auto_increment

l  數據庫和表的字符集統一使用UTF8

統一字符集可以避免由于字符集轉換產生的亂碼

MySQL中UTF8字符集漢字占3個字節,ASCII碼占1個字節

l  表必須有主鍵

l  所有表和字段都需要添加注釋

使用comment添加表和列的備注

好處:從一開始就進行數據字典的維護和整理

l  表數量不超過300個

l  盡量控制單表數據量的大小,建議數據控制在500萬行以內

500萬并不是MySQL數據庫的限制,MySQL最多可以存儲多少萬數據?

這種限制取決于存儲設置和文件系統

  可以用歷史數據歸檔,分庫分表等手段來控制數據量大小

l  禁止在數據庫中存儲圖片,視頻和文件等二進制數據

把圖片或文件存儲到相應的文件服務器中,數據庫中只存放圖片或文件的地址信息

通常文件很大,查詢IO操作耗時,會影響數據庫的性能

利用更有效的利用緩存,避免讀入無用的冷數據

經常一起使用的列放到一個表中

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

l  禁止從開發環境,測試環境直連生產環境數據庫

數據庫各個環境之間要進行隔離

l  臨時表和備份表必須定期清理(備份歸檔)

庫表設計

l  禁止使用分區表

分區表在物理上表現為多個文件,在邏輯上表現為一個表

謹慎選擇分區鍵,跨分區查詢效率可能更低

 對于大表建議采用物理分表的方式管理大數據

l  拆分大字段和訪問頻率低的字段,分離冷熱數據

盡量做到冷熱數據分離,減小表的寬帶

MySQL限制最多存儲4096列,每一行數據的大小不能超過65535個字節

減少磁盤 IO,保證熱數據的內存緩存命中率

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

l  采用合適的分庫分表策略。

字段設計

l  避免使用TEXT,BLOB數據類型

建議把BLOB或TEXT列分離到單獨的擴展表中

l  優先選擇符合存儲需要的最小的數據類型, 使用INT UNSIGNED存儲IPV4

將字符串轉化為數字類型存儲:

INET_ATON('255.255.255.255')=4294967295

將數字類型轉化為字符串:

INET_NTOA(4294967295)='255.255.255.255'

l  使用TINYINT來代替ENUM類型

l  表字符集盡量選擇UTF8

l  避免使用ENUM枚舉數據類型

修改ENUM值需要使用ALTER語句

ENUM類型的ORDER BY操作效率低,需要額外操作

禁止使用數值作為ENUM的枚舉值

l  所有字段均定義為NOT NULL

索引NULL列需要額外的空間來保存,所以要占用更多的空間

進行比較和計算時候要對NULL值做特殊處理,索引會失效

l  使用UNSIGNED存儲非負整數

無符號值取值范圍:

UNSIGNED INT (0--4294967295)

l  同財務相關的金額類數據,必須使用decimal類型

Decimal類型為精準浮點數,在計算時不會丟失精度

占用空間由定義的寬度決定

可用于存儲比bigint更大的整數數據

l  盡量避免使用字符串存儲日期型數據

缺點1:無法用日期函數進行比較和計算

缺點2:用字符串存儲日期要占用更多的空間

l  使用TIMESTAMP或DATATIME類型存儲時間

TIMESTAMP  1970-01-01 00:00:01 --2038-01-19  03:14:07

l  INT類型固定占用4字節存儲,TIMESTAMP占用4字節和INT相同,但比INT可讀性高

l  禁止在數據庫中存儲明文密碼

索引規范

l  限制每張表的索引數量,建議單表索引數量不超過5個

l  禁止給表中的每一列都建立單獨的索引,單個索引中的字段數不超過5個

l  每個Innodb表都要有一個主鍵

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

主鍵建議選擇使用自增ID值

l  不使用更新頻繁的列

l  為經常需要排序、分組和聯合操作的字段建立索引

常見索引列建議

SELECT,UPDATE,DELETE語句的WHERE從句中的列

包含在ORDER BY,GROUP BY,DISTINCT中的字段

多表JOIN的關聯列

l  為常作為查詢條件的字段建立索引

l  刪除不再使用或者很少使用的索引

l  最左前綴匹配原則,非常重要的原則。

l  盡量選擇區分度高的列作為索引

l  避免建立冗余索引和重復索引

index(a,b,c), index(a,b) ,index(a)

 a列是冗余索引

l  對于頻繁的查詢優先考慮使用覆蓋索引

覆蓋索引:就是包含了所有查詢字段的索引

  全部字段不但是指where從句中出現的列,也包括出現在select從句,order by和group by從句中的列

  覆蓋索引的好處:避免Innodb表進行索引的二次查找

  可以把隨機IO變為順序IO加快查詢效率

SQL設計規范

l  避免隱式轉換,會導致索引失效

l  充分利用前綴索引

l  必須是最左前綴

l  JOIN消耗較多內存,產生臨時表

l  避免在數據庫中進行數學運算

l  WHERE從句中禁止對列進行函數轉換和計算

對列進行函數轉換或計算會導致無法使用索引

where date(createtime)='20160901'

改進:

 where createtime >= '20160901' and createtime < '20160902'

l  使用不等于(!= 或者 <>),無法使用索引

l  使用LIKE操作(如'%abc...')時,無法使用索引

l  拒絕大SQL,拆分成小SQL

不支持SQL并行查詢,MySQL一個SQL只能使用一個CPU進行計算

l  避免使用JOIN關聯太多的表

每join一個表會多占用一部分內存(join_buffer_size)

會產生臨時表操作,影響查詢效率

 MySQL最多允許關聯61個表,建議不超過5個

l  程序連接不同的數據庫使用不同的賬號,禁止跨庫查詢

l  用UNION ALL而不是UNION

UNION會把所有數據放到臨時表中后再進行去重操作

UNION ALL不會再對結果集進行去重操作

l  禁止使用select *進行查詢及沒有字段列表的insert操作

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

l  盡量不使用select *,而使用SELECT <字段列表>查詢

SELECT *返回結果中包含很多并不需要的字段,消耗更多的CPU和IO以及網絡帶寬資源

無法使用覆蓋索引

行為規范

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

超過100萬行的批量寫操作,要分批多次進行操作

l  對大表數據結構的修改一定要謹慎,會造成嚴重的鎖表操作,尤其是生產環境,是不能忍受的

對于大表使用pt-online-schema-change修改表結構,不會鎖表

避免大表修改產生的主從延遲

避免在對表字段進行修改時進行鎖表

l  推廣活動或上線新功能須提前通知DBA,請求壓力評估

l  對于程序連接數據庫賬號,遵循權限最小原則

l  程序使用的賬號原則上不準有drop權限

l  不使用super權限連接數據庫

禁止為程序使用的賬號賦予super權限

super權限只能留給DBA處理問題的賬號使用

l  對單表的多次alter操作必須合并為一次操作

l  產品出現非數據庫導致的故障時及時通知DBA協助排查

l  數據庫數據丟失,及時聯系DBA進行恢復

l  重大項目的數據庫方案選型和設計必須提前通知DBA參與

l  對特別重要的庫表,提前與DBA溝通確定維護和備份優先級

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

l  批量導入、導出數據須提前通知DBA,請求協助觀察

l  數據庫DDL及重要SQL及早提及DBA評審

l  提及線上DDL需求,所有SQL語句須有備注說明

上述就是小編為大家分享的MySQL開發設計規范有哪些了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

华安县| 尚义县| 涿州市| 乌海市| 兴城市| 东城区| 碌曲县| 鹤庆县| 敖汉旗| 神农架林区| 左云县| 德州市| 云林县| 镇江市| 金阳县| 类乌齐县| 湖口县| 荣昌县| 涞源县| 绥滨县| 方城县| 壤塘县| 凤山县| 婺源县| 潍坊市| 沛县| 乌拉特前旗| 阜南县| 界首市| 定远县| 安泽县| 玛多县| 会东县| 赣榆县| 深水埗区| 德阳市| 孙吴县| 巍山| 星子县| 晋州市| 江山市|