這篇文章將為大家詳細講解有關(guān)MySQL開發(fā)規(guī)范有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)服務(wù)項目包括洋縣網(wǎng)站建設(shè)、洋縣網(wǎng)站制作、洋縣網(wǎng)頁制作以及洋縣網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,洋縣網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到洋縣省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
基礎(chǔ)規(guī)范
使用innodb存儲引擎
表字符集使用utf-8
所有表添加注釋
單表數(shù)據(jù)量建議控制在5000W以內(nèi)
不再數(shù)據(jù)庫中存儲圖、文件等大數(shù)據(jù)
禁止在線上做數(shù)據(jù)庫壓力測試
禁止測試、開發(fā)環(huán)境直連數(shù)據(jù)庫
命名規(guī)范
庫名表名字段名必須有固定的命名長度,12個字符以內(nèi)
庫名、表名、字段名禁止超過32個字符。須見名之意
庫名、表名、字段名禁止使用MySQL保留字
臨時庫、表名必須以tmp為前綴,并以日期為后綴
備份庫、表必須以bak為前綴,并以日期為后綴
庫、表、字段開發(fā)設(shè)計規(guī)范
禁止使用分區(qū)表
拆分大字段和翻身顧問頻率低的字段,分離冷熱數(shù)據(jù)
用HASH進散表,表名后綴使進制數(shù),下標從0開始
按日期時間分表需符合YYYY[MM][DD][HH]
格式
采用合適的分庫分表策略。例如千庫十表、十庫百表等
盡可能不適用text、blob類型
用decimal代替float和double存儲精確浮點數(shù)
越簡單越好:將字符轉(zhuǎn)換為數(shù)字、使用tinyint來代替enum類型
所有字段均為not null
使用unsigned存儲非負數(shù)
int類型固定占有4字節(jié)存儲
使用timestamp存儲時間
使用int unsigned存儲ipv4
使用varbinary存儲大小寫敏感的變長字符串
禁止在數(shù)據(jù)庫中存儲明文密碼,把密碼加密后存儲
用好數(shù)值類型字段
類型
字節(jié)
最小值
最大值
tinyint | 1 | -128 | 127 |
smallint | 2 | -32768 | 32767 |
mediumint | 3 | -8388608 | 8388607 |
int | 4 | -2147483648 | 2147483647 |
bigint | 8 | -9223372036854775808 | 9223372036854775807 |
如果數(shù)值字段沒有那么大,就不要用bigint
存儲ip最好用int存儲而非char(15)
不允許使用enum
避免使用null字段
null字段很難查詢一花,null字段的索引需要額外空間,null字段的復(fù)合索引無效。
索引規(guī)范
單個表中的索引數(shù)量不超過5個
單個索引中的字段數(shù)不超過5個
對字符串使用前綴索引,前綴索引長度不超過8個字符
建議優(yōu)先考慮前綴索引,必要可添加偽列并建立索引
表必須有主鍵
不使用更新頻繁的列作為主鍵
盡量不選擇字符串列作為主鍵
不使用uuid md5 hash這些作為主鍵-太離散
默認使非空的唯一鍵作為主鍵
建議選擇自增或發(fā)號器
重要的SQL必須必須被索引,比如update、delete語句的where條件列、order by、group by、distinct的字段
多表join的字段注意
1.區(qū)分度最大的字段放在前面
2.核SQL優(yōu)先考慮覆蓋索引
3.避免冗余和重復(fù)索引
4.索引要綜合評估數(shù)據(jù)密度和分布以及考慮查詢和更新比例
索引禁忌
1.不在低基數(shù)列上建立索引、例如性別
2.不在索引列記性數(shù)學運算和函數(shù)運算
盡量不使用外鍵
1.外鍵用來保護參照完整性,可以業(yè)務(wù)端實現(xiàn)
2.對父表和字表的操作會互相影響,降低可用性
索引命名
1.非唯一索引必須以 inx_字段1_字段22.唯一索引必須以 uniq_字段1_字段2
索引字段的默認值不能為空。null非常影響索引的查詢效率。
反復(fù)查看和表相關(guān)的SQL,符合最左前綴的特點建立索引。多條字段重復(fù)的索引,要修改語句條件字段的順序,為其建立一條聯(lián)合索引,減少索引數(shù)量。
能使用唯一索引就使用唯一索引
研發(fā)要經(jīng)常使用explain,如果發(fā)現(xiàn)索引選擇性差,必須讓他們學會使用hint。
SQL規(guī)范
SQL語句盡可能簡單
事物要簡單,整個事物的時間產(chǎn)生過度不要太長
避免使用觸發(fā)器、函數(shù)、存儲過程
降低業(yè)務(wù)耦合度,為sacle out,sharding留有余地
避免在數(shù)據(jù)庫中進行數(shù)學運算,mysql不擅長數(shù)學運算和邏輯判斷
不要用selecy *,查詢那幾個字段就select那幾個字段
sql中使用or的改寫成in,or的效率沒有in的效率高
in里面數(shù)字的個數(shù)建議1000以內(nèi)
limit分頁注意效率。limit越大,效率越低。
使用union all替代union
避免使大表join
使用group bu分組、自動排序
對數(shù)據(jù)的更新要打散后批量更新,不要一次更新太多數(shù)據(jù)
減少和數(shù)據(jù)庫的交互次數(shù)
注意使用性能分析工具
SQL語句要求所有研發(fā),SQL關(guān)鍵字全部大寫,每個詞只允許一個空格
SQL語句不可以出現(xiàn)隱式轉(zhuǎn)換
能不用not in就不用
禁止使用前綴是%的like
不使用負向查詢,如 not in、not like
禁止在數(shù)據(jù)庫總跑大查詢
使預(yù)編譯語句,只傳參數(shù),比傳遞SQL語句更高效。降低SQL注入。
禁止使order by rand
禁止單條SQL語句同時更新多個表
流程規(guī)范
所有的建表操作需要提前告知該表涉及的查詢SQL
所有的建表需要確定建立那些索引后才可以建表上線
所有的改表結(jié)構(gòu)、加索引操作都需要涉及到所該表的查詢SQL發(fā)出來通知DBA等相關(guān)人員
在新建表加字段之前,要求研發(fā)至少提前3天郵件出來,給dba門評估、優(yōu)化和審核
批量導入、導出數(shù)據(jù)必須提前通知DBA協(xié)助觀察
禁止線上從庫執(zhí)行后端管理和統(tǒng)計類查詢
禁止super權(quán)限的應(yīng)用程序賬戶存在
不再業(yè)務(wù)高峰期批量更新、查詢數(shù)據(jù)庫
關(guān)于MySQL開發(fā)規(guī)范有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
當前文章:MySQL開發(fā)規(guī)范有哪些
本文網(wǎng)址:http://muchs.cn/article18/johsdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、小程序開發(fā)、網(wǎng)站收錄、移動網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)