成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

必看的數(shù)據(jù)庫使用規(guī)范

Pluser / 2585人閱讀

摘要:導(dǎo)讀關(guān)于數(shù)據(jù)庫規(guī)范,相信大家多少看過一些文檔。關(guān)于庫強(qiáng)制庫的名稱必須控制在個(gè)字符以內(nèi),英文一律小寫。強(qiáng)制庫名只能使用英文字母,數(shù)字,下劃線,并以英文字母開頭。強(qiáng)制表名要求模塊名強(qiáng)相關(guān),同一模塊使用的表名盡量使用統(tǒng)一前綴。

導(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)于庫:

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

    【強(qiáng)制】庫的名稱格式:業(yè)務(wù)系統(tǒng)名稱_子系統(tǒng)名,不建議使用shulan前綴。

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

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

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

關(guān)于表

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

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

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

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

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

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

    【強(qiáng)制】對(duì)于超過100W行的大表進(jìn)行alter table,必須經(jīng)過DBA審核,并在業(yè)務(wù)低峰期執(zhí)行,多個(gè)alter需整合在一起。 因?yàn)閍lter table會(huì)產(chǎn)生表鎖,期間阻塞對(duì)于該表的所有寫入,對(duì)于業(yè)務(wù)可能會(huì)產(chǎn)生極大影響。

    【建議】建表時(shí)關(guān)于主鍵:表必須有主鍵 (1)強(qiáng)制要求主鍵為id,類型為int或bigint,且為auto_increment 建議使用unsigned無符號(hào)型。

    (2)標(biāo)識(shí)表里每一行主體的字段不要設(shè)為主鍵,建議設(shè)為其他字段如user_id,order_id等,并建立unique key索引。 因?yàn)槿绻O(shè)為主鍵且主鍵值為隨機(jī)插入,則會(huì)導(dǎo)致innodb內(nèi)部page分裂和大量隨機(jī)I/O,性能下降。

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

    【建議】表中所有字段盡量都是NOT NULL屬性,業(yè)務(wù)可以根據(jù)需要定義DEFAULT值。 因?yàn)槭褂肗ULL值會(huì)存在每一行都會(huì)占用額外存儲(chǔ)空間、數(shù)據(jù)遷移容易出錯(cuò)、聚合函數(shù)計(jì)算結(jié)果偏差等問題。

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

    【示范】一個(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 "用戶提交的簡(jiǎn)歷存放地址",
      `user_register_ip` int NOT NULL COMMENT "用戶注冊(cè)時(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)于索引

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

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

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

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

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

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

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

SQL編寫

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/7859.html

相關(guān)文章

  • Python工程師看的面試問題與解答(中)

    摘要:在中什么是迭代器在中,迭代器用于迭代一組元素,如列表之類的容器。中的生成器是什么實(shí)現(xiàn)迭代器的方法稱為生成器。如何將數(shù)字轉(zhuǎn)換為字符串要將數(shù)字轉(zhuǎn)換為字符串,請(qǐng)使用內(nèi)置函數(shù)。如果需要八進(jìn)制或十六進(jìn)制表示,請(qǐng)使用內(nèi)置函數(shù)或。 showImg(https://segmentfault.com/img/bVbfztO?w=1024&h=1024);16)在Python中什么是迭代器? 在Pytho...

    xiao7cn 評(píng)論0 收藏0
  • 新手建站看的十大忠告

    摘要:對(duì)于從零開始建網(wǎng)站的新手,知道下面十大忠告,可以少走彎路,早日走上康莊大道。阿里云自助建站平臺(tái)支持快速備案建一個(gè)手機(jī)網(wǎng)站手機(jī)網(wǎng)站具有讓消費(fèi)者隨時(shí)隨地隨身訪問的優(yōu)勢(shì)和方便快捷的不可取代的特點(diǎn)。對(duì)于從零開始建網(wǎng)站的新手,知道下面十大忠告,可以少走彎路,早日走上康莊大道。 1、一定要做網(wǎng)站規(guī)劃方案   一個(gè)網(wǎng)站的成功與否與建站前的網(wǎng)站規(guī)劃有著極為重要的關(guān)系。在建立網(wǎng)站前應(yīng)明確建設(shè)網(wǎng)站的目的,確定網(wǎng)...

    roadtogeek 評(píng)論0 收藏0
  • 進(jìn)階Java架構(gòu)師看的15本書

    摘要:阿里巴巴的共享服務(wù)理念以及企業(yè)級(jí)互聯(lián)網(wǎng)架構(gòu)建設(shè)的思路,給這些企業(yè)帶來了不少新的思路,這也是我最終決定寫這本書的最主要原因。盡在雙阿里巴巴技術(shù)演進(jìn)與超越是迄今唯一由阿里巴巴集團(tuán)官方出品全面闡述雙八年以來在技術(shù)和商業(yè)上演進(jìn)和創(chuàng)新歷程的書籍。 showImg(https://segmentfault.com/img/remote/1460000015386860); 1、大型網(wǎng)站技術(shù)架構(gòu):核...

    Julylovin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<