溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

自己總結(jié)的數(shù)據(jù)庫設(shè)計(jì)規(guī)范

發(fā)布時(shí)間:2020-09-04 13:34:04 來源:網(wǎng)絡(luò) 閱讀:673 作者:arthur376 欄目:MySQL數(shù)據(jù)庫

總體方向思維

1.數(shù)據(jù)架構(gòu)和容量規(guī)劃相關(guān)
    a.總數(shù)據(jù)量的預(yù)估,一年或兩年為期限,直接影響硬盤容量規(guī)劃
    b.是否關(guān)聯(lián)其他數(shù)據(jù)庫和環(huán)境,關(guān)聯(lián)數(shù)據(jù)會(huì)影響數(shù)據(jù)增長量
    c.數(shù)據(jù)重要性,是否需要集群,備份級(jí)別的要求,不重要數(shù)據(jù)可選擇定期歸檔或清除舊數(shù)據(jù),硬盤要求可降低
        ps:數(shù)據(jù)重要性大體分為:完全不可丟失,丟一些可以接受,丟一部分可以接受,全丟都不影響

2.性能相關(guān)
    a.平均活躍連接數(shù)預(yù)估,活躍連接數(shù)越多,查詢也不會(huì)少,數(shù)據(jù)庫壓力就上來了
    b.預(yù)估QPS數(shù)據(jù),增刪查改的頻率,QPS越高,數(shù)據(jù)庫壓力越大
    c.代碼是否有輪巡和重復(fù)查詢現(xiàn)象,太過頻繁操作數(shù)據(jù)庫顯然也會(huì)增加壓力
    d.代碼是否有先查后改和沒過濾條件的查詢等問題邏輯,人為增加數(shù)據(jù)庫壓力的邏輯不可取
    e.代碼是否有緩存機(jī)制,特別針對(duì)靜態(tài)信息,能顯著減少數(shù)據(jù)庫壓力,但是要看框架設(shè)計(jì)思路

3.增長量
    a.數(shù)據(jù)增長和并發(fā)增長的預(yù)估,按月和按年預(yù)估,初期壓力不高可理解,但是別忘了要預(yù)估長期壓力
    b.直接業(yè)務(wù)和關(guān)聯(lián)業(yè)務(wù)增長的預(yù)估,算單庫壓力,同上,要看中長期,而關(guān)聯(lián)業(yè)務(wù)附帶的壓力往往被忽略


設(shè)計(jì)表時(shí)要注意

4.表結(jié)構(gòu)是否科學(xué)
    a.表字段避免null值出現(xiàn),null值很難查詢優(yōu)化且占用額外的索引空間,推薦默認(rèn)數(shù)字0代替null。
    b.使用合適的INT類型,而非無腦BIGINT,如果非負(fù)則加上UNSIGNED(這樣數(shù)值容量會(huì)擴(kuò)大一倍),當(dāng)然能使用TINYINT、SMALLINT、MEDIUM_INT更好。
    c.如果只是分類字段(例如性別)或者是數(shù)據(jù)差異較少(例如月份)的字段,建議使用枚舉或整型代替字符串類型
    d.盡量使用TIMESTAMP而非DATETIME,因?yàn)镈ATETIME會(huì)逐步退出歷史
    e.單表不要有太多字段,建議在20以內(nèi),或者說是單條記錄所有字段加起來控制在8K字節(jié)內(nèi),因?yàn)閕nnodb默認(rèn)一個(gè)數(shù)據(jù)頁是16K,存兩行數(shù)據(jù),超過就會(huì)造成行溢出,影響性能
    f.用整型來存IP,電話號(hào)碼,身F證等信息,然后代碼拼接實(shí)現(xiàn)
    g.慎用blog/text大字段,因?yàn)槿菀自斐蓛?nèi)存溢出,盡量也只用在非常用查詢字段,或者查詢時(shí)主動(dòng)隱藏該字段,按需顯示
    h.慎用存儲(chǔ)過程,觸發(fā)器,函數(shù),因?yàn)楸容^耗費(fèi)數(shù)據(jù)庫內(nèi)部資源,用程序?qū)崿F(xiàn)更好
    i.字符集,注釋,字段的關(guān)聯(lián)統(tǒng)一性,字符集和字段統(tǒng)一可以避免類型轉(zhuǎn)換和主從報(bào)錯(cuò),注釋統(tǒng)一方便查詢其含義

5.索引結(jié)構(gòu)設(shè)計(jì)規(guī)范

    a.索引越多,理論上查詢?cè)娇?但是占用硬盤空間也越多,數(shù)據(jù)插入越慢(寫完數(shù)據(jù)還要寫索引),需要慎重考慮索引的必要性
    b.不要用外鍵,刪除和修改字段會(huì)造成關(guān)聯(lián)鎖定,異常麻煩,盡量用程序約束就足夠了
    c.建立索引要注意數(shù)據(jù)差異對(duì)比,差異太少不適合建立獨(dú)立索引,應(yīng)和其他字段建立聯(lián)合索引,但要注意最左匹配原則,避免建立重復(fù)的索引
    d.盡量避免在WHERE子句中對(duì)字段進(jìn)行NULL值判斷,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描
    e.字符字段盡量只建前綴索引,且最好不要做主鍵,因?yàn)榉秶樵冃阅懿?建議建立一個(gè)自增整型字段做主鍵,字符字段做唯一索引
    f.插入操作太多的字段應(yīng)避免使用唯一索引,因?yàn)槊看尾迦攵紩?huì)判斷唯一性,耗費(fèi)不必要的性能,雖然查詢也會(huì)判斷,但是這個(gè)性能損耗少很多,可以忽略








向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI