數(shù)據(jù)庫設(shè)計

數(shù)據(jù)庫設(shè)計

前要:字符串長度不是定義字節(jié)數(shù),而是字符數(shù)友酱,多字節(jié)字符集需要更多的空間存儲單個字符晴音。

字段設(shè)計維度的思考

可以按照以下維度考慮設(shè)計:

  • 按照字段的使用頻率設(shè)計,預(yù)判性的分為冷缔杉、溫段多、熱字段設(shè)計表
  • 根據(jù)展示數(shù)據(jù)展示位置來設(shè)計,比如有些數(shù)據(jù)只在個人中心顯示而不會在其他地方顯示
  • 根據(jù)字段的大小設(shè)計表壮吩,比如进苍,有些大文本 text加缘,blob的類型的可以考慮拆分。
  • 按照讀/寫(更新)的比例來設(shè)計表

數(shù)據(jù)類型的選擇

  • 更小的通常更快觉啊,性能更佳原因在于占用更少的磁盤拣宏,內(nèi)存,cpu緩存并且需要處理的cpu周期也更小杠人。但是要確認你沒有低估存儲值的范圍
  • 盡量避免NULL勋乾,相對于mysql來說,他更難優(yōu)化嗡善,因為NULL的列使得索引辑莫、索引統(tǒng)計和值比較都更為復(fù)雜。
  • 在mysql中罩引,整型的計算一般使用bigint(64位)來計算各吨,即使是32位的環(huán)境也是如此。但是一些聚合函數(shù)例外袁铐,他們使用decimal和double來計算
  • decimal類型通常用來存儲精確小數(shù)揭蜒,因為他支持高精確計算(5.0及其以后)

索引的建立

  • 盡量避免在可為NULL的列上創(chuàng)建索引

應(yīng)該使用整型來存儲IP地址?

通常情況下剔桨,人們使用varchar(15)來存儲IPv4的地址屉更,事實上,他們是32位的無符號整型洒缀,而不是字符串瑰谜,用小數(shù)點分割成四部分只是為了讓人們簡單易懂,所以應(yīng)該用無符號整型來存儲ip地址树绩,mysql同時也提供了INET_ATON()和INET_NTOA()函數(shù)在這兩者之間轉(zhuǎn)換似舵。

如何在數(shù)據(jù)庫中存儲錢?

將需要存儲的貨幣單位更加小數(shù)的位數(shù)乘以相應(yīng)的倍數(shù)即可葱峡,假設(shè),我們要存儲到萬分之一分龙助,那么我們就把所有的金額乘以一百萬砰奕,將結(jié)果存儲在bigint中,這樣就可以避免浮點存儲計算不精確和decimal精確計算代價高的問題提鸟。

數(shù)據(jù)庫中DATETIME和TIMESAMP的區(qū)別军援?

他們都可以存儲相同的數(shù)據(jù)類型:時間和日期,精確到秒称勋。
但是區(qū)別:

  • TIMESAMP只使用DATETIME一半的存儲空間胸哥,并且會根據(jù)時區(qū)變化,具有特殊的自動更新能力赡鲜。
  • TIMESAMP允許的時間范圍要小很多空厌,所以有時候他上面的特殊能力可能為成為他的障礙庐船。
  • TIMESAMP能表示從1970年1月1日午夜以來的秒數(shù)到2038年,而DATETIME能保存1001年到9999年,精度為秒嘲更。

在數(shù)據(jù)庫中如何保存到微秒級別的時間戳筐钟?

答案是:使用bigint類型存儲微秒級別的時間戳也可以切換到mariadb來代替mysql

varchar和char的區(qū)別?

varchar:

varchar類型存儲的是可變長的字符串赋朦,他比定長類型的更節(jié)省空間篓冲,因為他只用必要的空間,字符越短使用越少的空間宠哄,但是有一種情況例外壹将,就是使用ROW_FORMAT=FIXED創(chuàng)建的話,每一行都使用的定長存儲毛嫉,這很浪費空間诽俯,另外varchar需要一到兩個字節(jié)額外記錄字符串的長度,如果列小于255個字節(jié)狱庇,那么使用一個字節(jié)惊畏,否則使用兩個。假設(shè)使用latin1字符集密任,則一個varchar(10)的列需要11個字節(jié)的存儲空間颜启,而varchar(20000)需要20002個字節(jié),因為需要存儲長度信息浪讳。

varchar雖然節(jié)省了空間缰盏,對性能有幫助,但由于是變長的淹遵,在update時可能會讓行比原來更長口猜,那么這就有額外的工作,這個行占用的空間增長透揣,并且在此頁內(nèi)沒有更多的空間存儲济炎,這種情況下,不同的存儲引擎的處理方式不一樣辐真,比如:myisam將拆成不同的片段存儲须尚,innodb則需要分裂頁使得行可以放在列內(nèi),總之侍咱,就是加重了碎片化耐床。

char:
char是定長的,mysql會根據(jù)定義的字符串長度來分配足夠的空間楔脯,當(dāng)存儲char的時候撩轰,mysql會刪除末尾的空格,且char值會根據(jù)采用空格進行填充

總結(jié):
varchar適合

  • 字符串列的最大長度比平均長度大很多,列更新很少的情況堪嫂,這樣碎片化不是問題偎箫,就像使用utf-8這樣復(fù)雜的字符集,每個字符度使用不同的字節(jié)數(shù)進行存儲溉苛。
  • 注意:innodb會把過長的varchar處理成blob

char適合

  • 存儲很短的字符串或者所有的值接近同一個長度镜廉,例如char比較適合存儲密碼md5值,因為這是一個定長的值愚战。
  • 對于經(jīng)常變更的數(shù)據(jù)娇唯,char也比varchar更好,因為定長的不容易產(chǎn)生碎片寂玲。
  • 對于非常短的列塔插,char比varchar在存儲空間上更有效率,因為varchar會需要額外字節(jié)來記錄長度拓哟。

個人博客:yulibaozi.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末想许,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子断序,更是在濱河造成了極大的恐慌流纹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件违诗,死亡現(xiàn)場離奇詭異漱凝,居然都是意外死亡,警方通過查閱死者的電腦和手機诸迟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門茸炒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阵苇,你說我怎么就攤上這事壁公。” “怎么了绅项?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵紊册,是天一觀的道長。 經(jīng)常有香客問我快耿,道長囊陡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任润努,我火速辦了婚禮,結(jié)果婚禮上示括,老公的妹妹穿的比我還像新娘铺浇。我一直安慰自己,他們只是感情好垛膝,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布鳍侣。 她就那樣靜靜地躺著丁稀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倚聚。 梳的紋絲不亂的頭發(fā)上线衫,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機與錄音惑折,去河邊找鬼授账。 笑死,一個胖子當(dāng)著我的面吹牛惨驶,可吹牛的內(nèi)容都是我干的白热。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼粗卜,長吁一口氣:“原來是場噩夢啊……” “哼屋确!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起续扔,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤攻臀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纱昧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刨啸,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年砌些,在試婚紗的時候發(fā)現(xiàn)自己被綠了呜投。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡存璃,死狀恐怖仑荐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纵东,我是刑警寧澤粘招,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站偎球,受9級特大地震影響洒扎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衰絮,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一袍冷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猫牡,春花似錦胡诗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骇陈。三九已至,卻和暖如春瑰抵,著一層夾襖步出監(jiān)牢的瞬間你雌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工二汛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留婿崭,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓习贫,卻偏偏與公主長得像逛球,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子苫昌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

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