這篇文章主要介紹“MySQL命名規(guī)范是什么”,在日常操作中,相信很多人在MySQL命名規(guī)范是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”MySQL命名規(guī)范是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的梅縣網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
所有數(shù)據(jù)庫(kù)對(duì)象名稱必須使用小寫字母并用下劃線分割。
所有數(shù)據(jù)庫(kù)對(duì)象名稱禁止使用 MySQL 保留關(guān)鍵字(如果表名中包含關(guān)鍵字查詢時(shí),需要將其用單引號(hào)括起來(lái))。
數(shù)據(jù)庫(kù)對(duì)象的命名要能做到見(jiàn)名識(shí)意,并且最后不要超過(guò)3 2 個(gè)字符。
臨時(shí)庫(kù)表必須以 tmp_ 為前綴并以日期為后綴,備份表必須以 bak_ 為前綴并以日期 ( 時(shí)間戳 ) 為后綴。
所有存儲(chǔ)相同數(shù)據(jù)的列名和列類型必須一致(一般作為關(guān)聯(lián)列,如果查詢時(shí)關(guān)聯(lián)列類型不一致會(huì)自動(dòng)進(jìn)行數(shù)據(jù)類型隱式轉(zhuǎn)換,會(huì)造成列上的索引失效,導(dǎo)致查詢效率降低)。
二、數(shù)據(jù)庫(kù)基本設(shè)計(jì)規(guī)范
所有表必須使用 InnoDB 存儲(chǔ)引擎沒(méi)有特殊要求(即 InnoDB 無(wú)法滿足的功能如:列存儲(chǔ),存儲(chǔ)空間數(shù)據(jù)等)的情況下,所有表必須使用 InnoDB 存儲(chǔ)引擎(MySQL 5.5 之前默認(rèn)使用 Myisam,5.6 以后默認(rèn)的為 InnoDB)InnoDB 支持事務(wù),支持行級(jí)鎖,更好的恢復(fù)性,高并發(fā)下性能更好。
數(shù)據(jù)庫(kù)和表的字符集統(tǒng)一使用 UTF8兼容性更好,統(tǒng)一字符集可以避免由于字符集轉(zhuǎn)換產(chǎn)生的亂碼,不同的字符集進(jìn)行比較前需要進(jìn)行轉(zhuǎn)換會(huì)造成索引失效。
所有表和字段都需要添加注釋使用 comment 從句添加表和列的備注 從一開(kāi)始就進(jìn)行數(shù)據(jù)字典的維護(hù)。
盡量控制單表數(shù)據(jù)量的大小,建議控制在 500 萬(wàn)以內(nèi)
500 萬(wàn)并不是 MySQL 數(shù)據(jù)庫(kù)的限制,過(guò)大會(huì)造成修改表結(jié)構(gòu)、備份、恢復(fù)都會(huì)有很大的問(wèn)題,可以用歷史數(shù)據(jù)歸檔(應(yīng)用于日志數(shù)據(jù)),分庫(kù)分表(應(yīng)用于業(yè)務(wù)數(shù)據(jù))等手段來(lái)控制數(shù)據(jù)量大小。
謹(jǐn)慎使用 MySQL 分區(qū)表
分區(qū)表在物理上表現(xiàn)為多個(gè)文件,在邏輯上表現(xiàn)為一個(gè)表 謹(jǐn)慎選擇分區(qū)鍵,跨分區(qū)查詢效率可能更低 建議采用物理分表的方式管理大數(shù)據(jù)。
盡量做到冷熱數(shù)據(jù)分離,減小表的寬度
MySQL 限制每個(gè)表最多存儲(chǔ) 4096 列,并且每一行數(shù)據(jù)的大小不能超過(guò) 65535 字節(jié) 減少磁盤 IO,保證熱數(shù)據(jù)的內(nèi)存緩存命中率(表越寬,把表裝載進(jìn)內(nèi)存緩沖池時(shí)所占用的內(nèi)存也就越大,也會(huì)消耗更多的 IO) 更有效的利用緩存,避免讀入無(wú)用的冷數(shù)據(jù) 經(jīng)常一起使用的列放到一個(gè)表中(避免更多的關(guān)聯(lián)操作)
7.禁止在表中建立預(yù)留字段預(yù)留字段的命名很難做到見(jiàn)名識(shí)義 預(yù)留字段無(wú)法確認(rèn)存儲(chǔ)的數(shù)據(jù)類型,所以無(wú)法選擇合適的類型 對(duì)預(yù)留字段類型的修改,會(huì)對(duì)表進(jìn)行鎖定
8.禁止在數(shù)據(jù)庫(kù)中存儲(chǔ)圖片,文件等大的二進(jìn)制數(shù)據(jù)通常文件很大,會(huì)短時(shí)間內(nèi)造成數(shù)據(jù)量快速增長(zhǎng),數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)庫(kù)讀取時(shí),通常會(huì)進(jìn)行大量的隨機(jī) IO 操作,文件很大時(shí),IO 操作很耗時(shí) 通常存儲(chǔ)于文件服務(wù)器,數(shù)據(jù)庫(kù)只存儲(chǔ)文件地址信息。
9.禁止在線上做數(shù)據(jù)庫(kù)壓力測(cè)試
10.禁止從開(kāi)發(fā)環(huán)境,測(cè)試環(huán)境直接連接生成環(huán)境數(shù)據(jù)庫(kù)
三、數(shù)據(jù)庫(kù)字段設(shè)計(jì)規(guī)范
原因
列的字段越大,建立索引時(shí)所需要的空間也就越大,這樣一頁(yè)中所能存儲(chǔ)的索引節(jié)點(diǎn)的數(shù)量也就越少也越少,在遍歷時(shí)所需要的IO次數(shù)也就越多, 索引的性能也就越差
方法
將字符串轉(zhuǎn)換成數(shù)字類型存儲(chǔ),如:
將IP地址轉(zhuǎn)換成整形數(shù)據(jù)。
MySQL 提供了兩個(gè)方法來(lái)處理 IP 地址:
inet_aton 把ip轉(zhuǎn)為無(wú)符號(hào)整型(4-8位)inet_ntoa 把整型的ip轉(zhuǎn)為地址
插入數(shù)據(jù)前,先用 inet_aton 把 IP 地址轉(zhuǎn)為整型,可以節(jié)省空間。
顯示數(shù)據(jù)時(shí),使用 inet_ntoa 把整型的 IP 地址轉(zhuǎn)為地址顯示即可
2.對(duì)于非負(fù)型的數(shù)據(jù)(如自增 ID、整型 IP)來(lái)說(shuō),要優(yōu)先使用無(wú)符號(hào)整型來(lái)存儲(chǔ)
因?yàn)闊o(wú)符號(hào)相對(duì)于有符號(hào)可以多出一倍的存儲(chǔ)空間。
SIGNED INT -2147483648~2147483647UNSIGNED INT 0~4294967295
VARCHAR(N) 中的 N 代表的是字符數(shù),而不是字節(jié)數(shù)。使用 UTF8 存儲(chǔ) 255 個(gè)漢字 Varchar(255)=765 個(gè)字節(jié)。過(guò)大的長(zhǎng)度會(huì)消耗更多的內(nèi)存
建議把 BLOB 或是TEXT列分離到單獨(dú)的擴(kuò)展表中
MySQL 內(nèi)存臨時(shí)表不支持 TEXT、BLOB 這樣的大數(shù)據(jù)類型,如果查詢中包含這樣的數(shù)據(jù),在排序等操作時(shí),就不能使用內(nèi)存臨時(shí)表,必須使用磁盤臨時(shí)表進(jìn)行。
而且對(duì)于這種數(shù)據(jù),MySQL 還是要進(jìn)行二次查詢,會(huì)使 SQL 性能變得很差,但是不是說(shuō)一定不能使用這樣的數(shù)據(jù)類型。
如果一定要使用,建議把 BLOB 或是 TEXT 列分離到單獨(dú)的擴(kuò)展表中,查詢時(shí)一定不要使用 select * 而只需要取出必要的列,不需要 TEXT 列的數(shù)據(jù)時(shí)不要對(duì)該列進(jìn)行查詢。
TEXT 或 BLOB 類型只能使用前綴索引
因?yàn)?MySQL 對(duì)索引字段長(zhǎng)度是有限制的,所以 TEXT 類型只能使用前綴索引,并且 TEXT 列上是不能有默認(rèn)值的。
修改 ENUM 值需要使用 ALTER 語(yǔ)句
ENUM 類型的 ORDER BY 操作效率低,需要額外操作
禁止使用數(shù)值作為 ENUM 的枚舉值
4. 盡可能把所有列定義為 NOT NULL
原因:
索引 NULL 列需要額外的空間來(lái)保存,所以要占用更多的空間。
進(jìn)行比較和計(jì)算時(shí)要對(duì) NULL 值做特別的處理。
5. 使用 TIMESTAMP(4 個(gè)字節(jié))或 DATETIME 類型(8 個(gè)字節(jié))存儲(chǔ)時(shí)間
TIMESTAMP 存儲(chǔ)的時(shí)間范圍 1970-01-01 00:00:01 ~ 2038-01-19-03:14:07。
TIMESTAMP 占用 4 字節(jié)和 INT 相同,但比 INT 可讀性高,超出 TIMESTAMP 取值范圍的使用 DATETIME 類型存儲(chǔ)。
經(jīng)常會(huì)有人用字符串存儲(chǔ)日期型的數(shù)據(jù)(不正確的做法):
缺點(diǎn) 1:無(wú)法用日期函數(shù)進(jìn)行計(jì)算和比較。
缺點(diǎn) 2:用字符串存儲(chǔ)日期要占用更多的空間。
6. 同財(cái)務(wù)相關(guān)的金額類數(shù)據(jù)必須使用 decimal 類型
非精準(zhǔn)浮點(diǎn):float,double
精準(zhǔn)浮點(diǎn):decimal
Decimal 類型為精準(zhǔn)浮點(diǎn)數(shù),在計(jì)算時(shí)不會(huì)丟失精度。占用空間由定義的寬度決定,每 4 個(gè)字節(jié)可以存儲(chǔ) 9 位數(shù)字,并且小數(shù)點(diǎn)要占用一個(gè)字節(jié)。可用于存儲(chǔ)比 bigint 更大的整型數(shù)據(jù)。
索引并不是越多越好!索引可以提高效率同樣也可以降低效率;索引可以增加查詢效率,但同樣也會(huì)降低插入和更新的效率,甚至有些情況下會(huì)降低查詢效率。
因?yàn)?MySQL 優(yōu)化器在選擇如何優(yōu)化查詢時(shí),會(huì)根據(jù)統(tǒng)一信息,對(duì)每一個(gè)可以用到的索引來(lái)進(jìn)行評(píng)估,以生成出一個(gè)最好的執(zhí)行計(jì)劃,如果同時(shí)有很多個(gè)索引都可以用于查詢,就會(huì)增加 MySQL 優(yōu)化器生成執(zhí)行計(jì)劃的時(shí)間,同樣會(huì)降低查詢性能。
5.6 版本之前,一個(gè) SQL 只能使用到一個(gè)表中的一個(gè)索引,5.6 以后,雖然有了合并索引的優(yōu)化方式,但是還是遠(yuǎn)遠(yuǎn)沒(méi)有使用一個(gè)聯(lián)合索引的查詢方式好
InnoDB 是一種索引組織表:數(shù)據(jù)的存儲(chǔ)的邏輯順序和索引的順序是相同的。每個(gè)表都可以有多個(gè)索引,但是表的存儲(chǔ)順序只能有一種 InnoDB是按照主鍵索引的順序來(lái)組織表的。
不要使用更新頻繁的列作為主鍵,不適用多列主鍵(相當(dāng)于聯(lián)合索引) 不要使用 UUID、MD5、HASH、字符串列作為主鍵(無(wú)法保證數(shù)據(jù)的順序增長(zhǎng))。主鍵建議使用自增 ID 值。
出現(xiàn)在 SELECT、UPDATE、DELETE 語(yǔ)句的 WHERE 從句中的列。
包含在 ORDER BY、GROUP BY、DISTINCT 中的字段。
并不要將符合 1 和 2 中的字段的列都建立一個(gè)索引,通常將 1、2 中的字段建立聯(lián)合索引效果更好。
多表 JOIN 的關(guān)聯(lián)列。
到此,關(guān)于“MySQL命名規(guī)范是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
本文名稱:MySQL命名規(guī)范是什么
本文來(lái)源:http://m.kartarina.com/article30/jeopso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站設(shè)計(jì)、域名注冊(cè)、移動(dòng)網(wǎng)站建設(shè)、用戶體驗(yàn)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)