設(shè)計MySql一定需要注意的幾點?

選自“瀟灑哥和黑大帥”公眾號他炊,一個程序員和他的愛情故事争剿。

不使用enum

首先說一下優(yōu)點,可以控制插入字符的選項痊末,規(guī)范數(shù)據(jù)蚕苇。那說說有哪些缺點,如下:

  • 不方便擴(kuò)展:后期如果增加選項凿叠,如果不是插入到最后涩笤,那 enum 的索引就會調(diào)整
  • 保存要注意:如果存儲數(shù)字字符串時,一定要帶引號盒件,如果不帶蹬碧,會視為索引

總結(jié):如果你的內(nèi)容是固定的,后期不會增加炒刁,那可以選擇 enum 恩沽,例如:男、女翔始。那如果是狀態(tài)類的飒筑,后期會根據(jù)業(yè)務(wù)增加新狀態(tài),那就使用 tinyint(1) 绽昏。

不使用外鍵

這是一個把約束最終交給數(shù)據(jù)庫還是程序的問題协屡,我在這說說我的幾點看法。

  1. 性能:沒有了外鍵約束全谤,那自然性能會提高肤晓。
  2. 可讀性:有外鍵約束,增加 ER 圖的可讀性,方便查看表之間的關(guān)系补憾。
  3. 完整性:有外鍵約束漫萄,可以在數(shù)據(jù)庫層面控制數(shù)據(jù)的完整性,不會造成一個表有數(shù)據(jù)盈匾,一個表沒有腾务。但如果我進(jìn)行數(shù)據(jù)的部分保全,那使用外鍵就是個約束削饵。

說了這幾點后岩瘦, 自然也明白了我不選擇使用外鍵的原因。

不存儲NULL值

當(dāng)保存字符串?dāng)?shù)據(jù)是空的時候窿撬,往往有兩種選擇启昧,空字符串或NULL。那如何選擇呢劈伴,我這里先給出建議密末,選擇空字符串(默認(rèn)空字符串),原因如下:

  1. 空值不占空間跛璧,NULL值占空間严里。當(dāng)字段不為NULL時,也可以插入空值追城。
  2. 當(dāng)使用 IS NOT NULL 或者 IS NULL 時田炭,只能查出字段中沒有不為NULL的或者為 NULL 的,不能查出空值漓柑。
  3. 在進(jìn)行count()統(tǒng)計某列的記錄數(shù)的時候教硫,如果采用的NULL值,系統(tǒng)會自動忽略掉辆布,但是空值是會進(jìn)行統(tǒng)計到其中的瞬矩。

TIMESTAMP和DATETIME

  1. 存儲方式

    對于TIMESTAMP,它把客戶端插入的時間從當(dāng)前時區(qū)轉(zhuǎn)化為UTC(世界標(biāo)準(zhǔn)時間)進(jìn)行存儲锋玲。查詢時,將其又轉(zhuǎn)化為客戶端當(dāng)前時區(qū)進(jìn)行返回惭蹂。

    而對于DATETIME,不做任何改變盾碗,基本上是原樣輸入和輸出。

  2. 范圍

  • DATETIME 時間截至到 9999-12-31 23:59:59
  • TIMESTAMP 時間截止到 2038-1-19 11:14:07
  1. 自動填充時間

mysql5.6 之前 TIMESTAMP 支持如下語法廷雅,5.6之后 DATETIME 才支持

-- 創(chuàng)建時自動填充當(dāng)前時間
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- 創(chuàng)建和修改時自動填充當(dāng)前時間
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1. 總結(jié)

如果不考慮時間的截至日期耗美,我考慮選擇 TIMESTAMP京髓,因為可以兼容不同版本的時間填充和時區(qū)控制商架。

字符集和排序規(guī)則

在創(chuàng)建數(shù)據(jù)庫時,需要設(shè)定字符集和排序規(guī)則蛇摸。

  1. 先說字符集备图,推薦使用 utf8mb4 ,這個包含目前所有的信息存儲赶袄,例如:emoji表情揽涮、所有語言

  2. 排序規(guī)則

    • utf8_general_ci 不區(qū)分大小寫弃鸦,這個你在注冊用戶名和郵箱的時候就要使用幢痘。
    • utf8_general_cs 區(qū)分大小寫唬格,如果用戶名和郵箱用這個 就會照成不良后果
    • utf8_bin:字符串每個字符串用二進(jìn)制數(shù)據(jù)編譯存儲颜说。 區(qū)分大小寫,而且可以存二進(jìn)制的內(nèi)容

    注意:一般選擇 utf8_general_ci 喊积,它在where 語句進(jìn)行比對查詢時,速度很快乾吻。

不使用bit類型

在設(shè)計表時拟蜻,如果出現(xiàn)狀態(tài)之類的字段。例如:0 代表男酝锅,1 代表女。使用 tinyint(1) 代替爸舒。原因如下:

  1. 不能節(jié)省空間大小

    剛開始我從字面意思理解 bit(1) 只占用了 1 bit(位)(1字節(jié)等于8bit)稿蹲,那真實情況是什么,查看官網(wǎng)文檔后發(fā)現(xiàn)苛聘,bit(M) 的存儲空間大約是 (M+7)/8 字節(jié)嫉入,也就是說 bit(1) 存儲的大小不是 1位璧尸,而是1 字節(jié)

  2. 使用上的不便

    mysql中的二進(jìn)制類型,存儲數(shù)據(jù)時使用 B'1111100' 或 b'1111100' 爷光,讀取數(shù)據(jù)時使用 bin(column_name)。

少用text類型

查詢速度: char > varchar > text

  • 存儲的數(shù)據(jù)長度固定欢瞪,選擇char類型
  • 不固定的話使用varchar徐裸,避免使用text,如果varchar長度不夠時可以增加長度重贺。在業(yè)務(wù)方面內(nèi)容長度最好得到規(guī)范和控制。

以上是我在實際開發(fā)中所總結(jié)的一些經(jīng)驗次企,如果你還有其它說的潜圃,請在評論區(qū)補(bǔ)充。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堵第,一起剝皮案震驚了整個濱河市隧出,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸳劳,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涵紊,死亡現(xiàn)場離奇詭異幔摸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)既忆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跃脊,“玉大人,你說我怎么就攤上這事器瘪。” “怎么了橡疼?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵庐舟,是天一觀的道長。 經(jīng)常有香客問我历帚,道長瘟檩,這世上最難降的妖魔是什么抹缕? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮趴俘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘太惠。我一直安慰自己疲憋,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布缚柳。 她就那樣靜靜地躺著,像睡著了一般彩掐。 火紅的嫁衣襯著肌膚如雪灰追。 梳的紋絲不亂的頭發(fā)上狗超,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天朴下,我揣著相機(jī)與錄音,去河邊找鬼殴胧。 笑死,一個胖子當(dāng)著我的面吹牛免胃,可吹牛的內(nèi)容都是我干的惫撰。 我是一名探鬼主播羔沙,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼扼雏,長吁一口氣:“原來是場噩夢啊……” “哼夯膀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诱建,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茎匠,沒想到半個月后押袍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡汽馋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年圈盔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片药磺。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡癌佩,死狀恐怖便锨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情放案,我是刑警寧澤矫俺,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站厘托,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏押赊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一流礁、第九天 我趴在偏房一處隱蔽的房頂上張望罗丰。 院中可真熱鬧,春花似錦找御、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔽挠。三九已至,卻和暖如春澳淑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杠巡。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工氢拥, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留锨侯,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓囚痴,卻偏偏與公主長得像审葬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涣觉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容