最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)庫使用規(guī)范總結(jié)

 更新時(shí)間:2020年08月07日 09:51:02   作者:MySQL技術(shù)  
本篇文章給大家詳細(xì)分類總結(jié)了數(shù)據(jù)庫相關(guān)規(guī)范,幫助大家發(fā)揮出數(shù)據(jù)庫的性能,感興趣的朋友可以了解下

導(dǎo)讀:

關(guān)于MySQL數(shù)據(jù)庫規(guī)范,相信大家多少看過一些文檔。本篇文章給大家詳細(xì)分類總結(jié)了數(shù)據(jù)庫相關(guān)規(guī)范,從庫表命名設(shè)計(jì)規(guī)范講起,到索引設(shè)計(jì)規(guī)范,后面又給出SQL編寫方面的建議。相信這些規(guī)范適用于大多數(shù)公司,也希望大家都能按照規(guī)范來使用我們的數(shù)據(jù)庫,這樣我們的數(shù)據(jù)庫才能發(fā)揮出更高的性能。

關(guān)于庫:

1.【強(qiáng)制】庫的名稱必須控制在32個(gè)字符以內(nèi),英文一律小寫。

2.【強(qiáng)制】庫的名稱格式:業(yè)務(wù)系統(tǒng)名稱_子系統(tǒng)名。

3.【強(qiáng)制】庫名只能使用英文字母,數(shù)字,下劃線,并以英文字母開頭。

4.【強(qiáng)制】創(chuàng)建數(shù)據(jù)庫時(shí)必須顯式指定字符集,并且字符集只能是utf8或者utf8mb4。創(chuàng)建數(shù)據(jù)庫SQL舉例:Create database db1 default character set utf8;

5.【建議】臨時(shí)庫、表名以tmp_ 為前綴,并以日期為后綴,備份庫、表以 bak_ 為前綴,并以日期為后綴。

關(guān)于表

1.【強(qiáng)制】表和列的名稱必須控制在32個(gè)字符以內(nèi),表名只能使用字母、數(shù)字和下劃線,一律小寫。

2.【強(qiáng)制】表名要求模塊名強(qiáng)相關(guān),同一模塊使用的表名盡量使用統(tǒng)一前綴。

3.【強(qiáng)制】創(chuàng)建表時(shí)必須顯式指定字符集為utf8或utf8mb4。

4.【強(qiáng)制】列名盡量不用關(guān)鍵字(如type,order等)。

5.【強(qiáng)制】創(chuàng)建表時(shí)必須顯式指定表存儲引擎類型,如無特殊需求,一律為InnoDB。

6.【強(qiáng)制】建表必須有comment。

7.【強(qiáng)制】對于超過100W行的大表進(jìn)行alter table,必須經(jīng)過DBA審核,并在業(yè)務(wù)低峰期執(zhí)行,多個(gè)alter需整合在一起。

因?yàn)閍lter table會產(chǎn)生表鎖,期間阻塞對于該表的所有寫入,對于業(yè)務(wù)可能會產(chǎn)生極大影響。

8.【建議】建表時(shí)關(guān)于主鍵:表必須有主鍵

(1)強(qiáng)制要求主鍵為id,類型為int或bigint,且為auto_increment 建議使用unsigned無符號型。

(2)標(biāo)識表里每一行主體的字段不要設(shè)為主鍵,建議設(shè)為其他字段如user_id,order_id等,并建立unique key索引。

因?yàn)槿绻O(shè)為主鍵且主鍵值為隨機(jī)插入,則會導(dǎo)致innodb內(nèi)部page分裂和大量隨機(jī)I/O,性能下降。

9.【建議】核心表(如用戶表)必須有行數(shù)據(jù)的創(chuàng)建時(shí)間字段create_time和最后更新時(shí)間字段update_time,便于查問題。

10.【建議】表中所有字段盡量都是NOT NULL屬性,業(yè)務(wù)可以根據(jù)需要定義DEFAULT值。

因?yàn)槭褂肗ULL值會存在每一行都會占用額外存儲空間、數(shù)據(jù)遷移容易出錯(cuò)、聚合函數(shù)計(jì)算結(jié)果偏差等問題。

11.【建議】中間表用于保留中間結(jié)果集,名稱必須以tmp_ 開頭。備份表用于備份或抓取源表快照,名稱必須以bak_開頭。中間表和備份表定期清理。

12.【示范】一個(gè)較為規(guī)范的建表語句:

CREATE TABLE user_info ( `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵', `user_id` bigint(11) NOT NULL COMMENT '用戶id', `username` varchar(45) NOT NULL COMMENT '真實(shí)姓名', `email` varchar(30) NOT NULL COMMENT '用戶郵箱', `nickname` varchar(45) NOT NULL COMMENT '昵稱', `birthday` date NOT NULL COMMENT '生日', `sex` tinyint(4) DEFAULT '0' COMMENT '性別', `short_introduce` varchar(150) DEFAULT NULL COMMENT '一句話介紹自己,最多50個(gè)漢字', `user_resume` varchar(300) NOT NULL COMMENT '用戶提交的簡歷存放地址', `user_register_ip` int NOT NULL COMMENT '用戶注冊時(shí)的源ip', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時(shí)間', `user_review_status` tinyint NOT NULL COMMENT '用戶資料審核狀態(tài),1為通過,2為審核中,3為未通過,4為還未提交審核', PRIMARY KEY (`id`), UNIQUE KEY `uniq_user_id` (`user_id`), KEY `idx_username`(`username`), KEY `idx_create_time_status`(`create_time`,`user_review_status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='網(wǎng)站用戶基本信息'

關(guān)于索引

1.【強(qiáng)制】InnoDB表必須主鍵為id int/bigint auto_increment,且主鍵值禁止被更新。

2.【強(qiáng)制】InnoDB和MyISAM存儲引擎表,索引類型必須為BTREE。

3.【建議】主鍵的名稱以 pk_ 開頭,唯一鍵以 uniq_ 或  uk_  開頭,普通索引以 idx_ 開頭,一律使用小寫格式,以字段的名稱或縮寫作為后綴。

4.【建議】單個(gè)表上的索引個(gè)數(shù)不能超過8個(gè)。

5.【建議】在建立索引時(shí),多考慮建立聯(lián)合索引,并把區(qū)分度最高的字段放在最前面。如列userid的區(qū)分度可由select count(distinct userid)計(jì)算出來。

6.【建議】在多表join的SQL里,保證被驅(qū)動表的連接列上有索引,這樣join執(zhí)行效率最高。

7.【建議】建表或加索引時(shí),保證表里互相不存在冗余索引。
對于MySQL來說,如果表里已經(jīng)存在key(a,b),則key(a)為冗余索引,需要刪除。

SQL編寫

1.【強(qiáng)制】程序端SELECT語句必須指定具體字段名稱,禁止寫成 *。

2.【強(qiáng)制】程序端insert語句指定具體字段名稱,不要寫成insert into t1 values(…)。

3.【強(qiáng)制】除靜態(tài)表或小表(100行以內(nèi)),DML語句必須有where條件,且使用索引查找。

4.【強(qiáng)制】where條件里等號左右字段類型必須一致,否則無法利用索引。

5.【強(qiáng)制】WHERE 子句中禁止只使用全模糊的LIKE條件進(jìn)行查找,必須有其他等值或范圍查詢條件,否則無法利用索引。

6.【強(qiáng)制】索引列不要使用函數(shù)或表達(dá)式,否則無法利用索引。如where length(name)='Admin'或where user_id+2=10023。

7.【建議】insert into…values(XX),(XX),(XX).. 這里XX的值不要超過5000個(gè)。
值過多雖然上線很很快,但會引起主從同步延遲。

8.【建議】SELECT語句不要使用UNION,推薦使用UNION ALL,并且UNION子句個(gè)數(shù)限制在5個(gè)以內(nèi)。
因?yàn)閡nion all不需要去重,節(jié)省數(shù)據(jù)庫資源,提高性能。

9.【強(qiáng)制】禁止跨db的join語句。

10.【建議】不建議使用子查詢,建議將子查詢SQL拆開結(jié)合程序多次查詢,或使用join來代替子查詢。

11.【建議】線上環(huán)境,多表join不要超過5個(gè)表。

12.【建議】在多表join中,盡量選取結(jié)果集較小的表作為驅(qū)動表,來join其他表。

13.【建議】批量操作數(shù)據(jù)時(shí),需要控制事務(wù)處理間隔時(shí)間,進(jìn)行必要的sleep。

14.【建議】事務(wù)里包含SQL不超過5個(gè)
因?yàn)檫^長的事務(wù)會導(dǎo)致鎖數(shù)據(jù)較久,MySQL內(nèi)部緩存、連接消耗過多等問題。

15.【建議】事務(wù)里更新語句盡量基于主鍵或unique key,如update … where id=XX;
否則會產(chǎn)生間隙鎖,內(nèi)部擴(kuò)大鎖定范圍,導(dǎo)致系統(tǒng)性能下降,產(chǎn)生死鎖。

16.【建議】減少使用order by,和業(yè)務(wù)溝通能不排序就不排序,或?qū)⑴判蚍诺匠绦蚨巳プ?。Order by、group by、distinct這些語句較為耗費(fèi)CPU,數(shù)據(jù)庫的CPU資源是極其寶貴的。

17.【建議】order by、group by、distinct這些SQL盡量利用索引直接檢索出排序好的數(shù)據(jù)。如where a=1 order by b可以利用key(a,b)。

18.【建議】包含了order by、group by、distinct這些查詢的語句,where條件過濾出來的結(jié)果集請保持在1000行以內(nèi),否則SQL會很慢。

以上就是MySQL數(shù)據(jù)庫使用規(guī)范的詳細(xì)內(nèi)容,更多關(guān)于MySQL使用規(guī)范的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mysql7.x單獨(dú)安裝mysql的方法

    mysql7.x單獨(dú)安裝mysql的方法

    這篇文章主要介紹了mysql7.x單獨(dú)安裝mysql的方法,要解決這個(gè)問題,我們要先下載mysql的repo源,具體操作步驟大家通過本文學(xué)習(xí)吧
    2017-01-01
  • MySQL主從搭建(多主一從)的實(shí)現(xiàn)思路與步驟

    MySQL主從搭建(多主一從)的實(shí)現(xiàn)思路與步驟

    通過MySQL主從配置,可以實(shí)現(xiàn)讀寫分離減輕數(shù)據(jù)庫壓力,最近正好遇到這個(gè)功能,所以這篇文章主要給大家介紹了關(guān)于MySQL主從搭建(多主一從)的實(shí)現(xiàn)思路與步驟,需要的朋友可以參考下
    2021-05-05
  • Mysql中的Datetime和Timestamp比較

    Mysql中的Datetime和Timestamp比較

    這篇文章主要介紹了Mysql中的Datetime和Timestamp比較,本文總結(jié)了它們的相同點(diǎn)和不同點(diǎn)以及時(shí)間格式介紹等,需要的朋友可以參考下
    2015-03-03
  • deepin20.1系統(tǒng)安裝MySQL8.0.23(超詳細(xì)的MySQL8安裝教程)

    deepin20.1系統(tǒng)安裝MySQL8.0.23(超詳細(xì)的MySQL8安裝教程)

    這篇文章主要介紹了deepin20.1系統(tǒng)安裝MySQL8.0.23(最美國產(chǎn)Liunx系統(tǒng),最詳細(xì)的MySQL8安裝教程),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Mysql實(shí)現(xiàn)全文檢索、關(guān)鍵詞跑分的方法實(shí)例

    Mysql實(shí)現(xiàn)全文檢索、關(guān)鍵詞跑分的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Mysql實(shí)現(xiàn)全文檢索、關(guān)鍵詞跑分的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Linux系統(tǒng)徹底卸載MySQL數(shù)據(jù)庫詳解

    Linux系統(tǒng)徹底卸載MySQL數(shù)據(jù)庫詳解

    這篇文章主要介紹了Linux系統(tǒng)徹底卸載MySQL數(shù)據(jù)庫,首先查詢系統(tǒng)是否安裝了mysql,如果安裝需要提前卸載,并刪除mysql安裝的組建服務(wù),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • mysql查詢今天、昨天、近7天、近30天、本月、上一月的SQL語句

    mysql查詢今天、昨天、近7天、近30天、本月、上一月的SQL語句

    這篇文章主要介紹了mysql查詢今天、昨天、近7天、近30天、本月、上一月的SQL語句,一般在一些統(tǒng)計(jì)報(bào)表中比較常用這個(gè)時(shí)間段,需要的朋友可以參考下
    2014-06-06
  • percona 實(shí)用工具之pt-kill使用介紹

    percona 實(shí)用工具之pt-kill使用介紹

    一個(gè)優(yōu)秀的kill MySQL連接的一個(gè)工具,是percona toolkit的一部分,在因?yàn)榭臻e連接較多導(dǎo)致超過最大連接數(shù)、某個(gè)有問題的sql導(dǎo)致mysql負(fù)載很高時(shí),都需要將一些連接kill掉,這個(gè)工具主要就是這個(gè)用途
    2016-04-04
  • 淺談mysql中concat函數(shù),mysql在字段前/后增加字符串

    淺談mysql中concat函數(shù),mysql在字段前/后增加字符串

    下面小編就為大家?guī)硪黄獪\談mysql中concat函數(shù),mysql在字段前/后增加字符串。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • MySQL 處理插入過程中的主鍵唯一鍵重復(fù)值的解決方法

    MySQL 處理插入過程中的主鍵唯一鍵重復(fù)值的解決方法

    本篇文章主要介紹在插入數(shù)據(jù)到表中遇到鍵重復(fù)避免插入重復(fù)值的處理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE的相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04

最新評論

上饶市| 栖霞市| 榕江县| 浪卡子县| 桐城市| 彰武县| 屏山县| 巴林左旗| 普宁市| 江孜县| 察雅县| 渑池县| 南汇区| 鄂伦春自治旗| 弋阳县| 桑植县| 汝阳县| 涞源县| 丹阳市| 云和县| 嵩明县| 化隆| 绩溪县| 大连市| 光山县| 无极县| 遂平县| 德阳市| 富锦市| 桐柏县| 工布江达县| 赞皇县| 健康| 古田县| 澄江县| 临泉县| 阳曲县| 蓝田县| 新和县| 洮南市| 高平市|