MySQL命名規(guī)范是什么

這篇文章主要介紹“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ù)命令規(guī)范

  • 所有數(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ī)范

  1. 所有表必須使用 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ā)下性能更好。

  2. 數(shù)據(jù)庫(kù)和表的字符集統(tǒng)一使用 UTF8兼容性更好,統(tǒng)一字符集可以避免由于字符集轉(zhuǎn)換產(chǎn)生的亂碼,不同的字符集進(jìn)行比較前需要進(jìn)行轉(zhuǎn)換會(huì)造成索引失效。

  3. 所有表和字段都需要添加注釋使用 comment 從句添加表和列的備注 從一開(kāi)始就進(jìn)行數(shù)據(jù)字典的維護(hù)。

  4. 盡量控制單表數(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ù)量大小。

  5. 謹(jǐn)慎使用 MySQL 分區(qū)表

    分區(qū)表在物理上表現(xiàn)為多個(gè)文件,在邏輯上表現(xiàn)為一個(gè)表 謹(jǐn)慎選擇分區(qū)鍵,跨分區(qū)查詢效率可能更低 建議采用物理分表的方式管理大數(shù)據(jù)。

  6. 盡量做到冷熱數(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ī)范

1. 優(yōu)先選擇符合存儲(chǔ)需要的最小的數(shù)據(jù)類型

  • 原因

    列的字段越大,建立索引時(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)存

2. 避免使用 TEXT、BLOB 數(shù)據(jù)類型,最常見(jiàn)的TEXT類型可以存儲(chǔ)64k的數(shù)據(jù)

  • 建議把 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)值的。

3. 避免使用 ENUM 類型

  • 修改 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ù)。

四、索引設(shè)計(jì)規(guī)范

1. 限制每張表上的索引數(shù)量,建議單張表索引不超過(guò) 5 個(gè)

索引并不是越多越好!索引可以提高效率同樣也可以降低效率;索引可以增加查詢效率,但同樣也會(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ì)降低查詢性能。

2. 禁止給表中的每一列都建立單獨(dú)的索引

5.6 版本之前,一個(gè) SQL 只能使用到一個(gè)表中的一個(gè)索引,5.6 以后,雖然有了合并索引的優(yōu)化方式,但是還是遠(yuǎn)遠(yuǎn)沒(méi)有使用一個(gè)聯(lián)合索引的查詢方式好

3. 每個(gè) InnoDB 表必須有個(gè)主鍵

InnoDB 是一種索引組織表:數(shù)據(jù)的存儲(chǔ)的邏輯順序和索引的順序是相同的。每個(gè)表都可以有多個(gè)索引,但是表的存儲(chǔ)順序只能有一種 InnoDB是按照主鍵索引的順序來(lái)組織表的。

不要使用更新頻繁的列作為主鍵,不適用多列主鍵(相當(dāng)于聯(lián)合索引) 不要使用 UUID、MD5、HASH、字符串列作為主鍵(無(wú)法保證數(shù)據(jù)的順序增長(zhǎng))。主鍵建議使用自增 ID 值。

五、常見(jiàn)索引列建議

  • 出現(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)

成都seo排名網(wǎng)站優(yōu)化
主站蜘蛛池模板: 日韩爆乳一区二区无码| 国精品无码一区二区三区在线 | 无码人妻丰满熟妇精品区| 日韩免费无码一区二区视频| 亚洲精品无码AV中文字幕电影网站| 国产啪亚洲国产精品无码| 亚洲国产a∨无码中文777| 无码人妻精品一区二区三区东京热 | 亚洲Av综合色区无码专区桃色| 内射人妻无码色AV天堂| 亚洲日韩精品无码专区网址 | 91精品久久久久久无码| 免费无码国产在线观国内自拍中文字幕| 中文字幕无码无码专区| 无码被窝影院午夜看片爽爽jk| 亚洲av无码无在线观看红杏| 小12箩利洗澡无码视频网站| 久热中文字幕无码视频| 中文字幕在线无码一区| 少妇中文无码高清| 精品亚洲av无码一区二区柚蜜| 亚洲A∨无码一区二区三区| 亚洲 无码 在线 专区| 好爽毛片一区二区三区四无码三飞| 无码国内精品久久人妻蜜桃| 人妻少妇AV无码一区二区| 无码激情做a爰片毛片AV片| 人妻少妇精品无码专区| 亚洲av无码一区二区三区天堂古代 | 亚洲精品9999久久久久无码| 久久亚洲精品成人无码网站| 久久男人Av资源网站无码软件 | 日本无码WWW在线视频观看| 久久久久琪琪去精品色无码| 综合国产在线观看无码| 久久精品无码一区二区app| 亚洲国产精品无码久久久久久曰 | 成人无码WWW免费视频| julia无码人妻中文字幕在线 | 狠狠躁天天躁无码中文字幕图| 无码人妻久久一区二区三区蜜桃|