《高性能MySQL》之选择优化的数据类型
生活随笔
收集整理的這篇文章主要介紹了
《高性能MySQL》之选择优化的数据类型
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1:前言
? ? mysql支持的數(shù)據(jù)類型非常多,選擇正確的數(shù)據(jù)類型對(duì)于獲得高性能至關(guān)重要。2:幾個(gè)原則
- ? ?更小的通常更好---滿足存儲(chǔ)需要的情況下使用最小的數(shù)據(jù)類型,因?yàn)檎加酶〉拇疟P,內(nèi)存和cpu緩存,并且處理需要的cpu周期也更少。舉個(gè)例子:我們經(jīng)常使用status 為 0,1 表示狀態(tài),這里使用TINYINT(-128-127)類型已經(jīng)足夠,不必使用int。
- ? 簡(jiǎn)單就好---簡(jiǎn)單數(shù)據(jù)類型的操作通常需要使用更小的CPU周期,整型比字符操作代價(jià)更低。
- ? 盡量避免Null--- 以前我們表中包含很多為NULL的列,即使不需要保存Null,通常情況下最好指定為Not NULL,除非真的需要。原因:1:優(yōu)化需要,對(duì)于查詢包含為NULL的列,會(huì)使索引,索引統(tǒng)計(jì)和值比較復(fù)雜,NULL會(huì)使用更多的存儲(chǔ)空間,當(dāng)NULL列被索引時(shí)需要一個(gè)額外的字節(jié)。2:程序問題,如果你domain中的變量沒有定義成包裝類,查詢時(shí)不能將NULL保存到數(shù)據(jù)。所以這里同時(shí)建議程序中使用Integer 代替 int 在domain中。
3:整數(shù)類型
? mysql支持一下幾種類型整數(shù):TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。分別8,16,24,32,64為存儲(chǔ)空間,范圍-2(N-1)-2(N-1)-1,其中N是存儲(chǔ)空間的位數(shù)。 ? ?整數(shù)還有UNSINGED屬性,表示不允許負(fù)值,可以使正數(shù)的上限提高一倍,但是存儲(chǔ)空間一樣,性能一樣。 ? ?整數(shù)計(jì)算一般使用64位BIGINT整數(shù),所以在代碼中接收類似count(id)的結(jié)果時(shí),要定義成BigInteger,不然會(huì)報(bào)錯(cuò), ? ?對(duì)于存儲(chǔ)和計(jì)算來說,INT(1)和INT(20)是一樣的。4:實(shí)體類型
? ?實(shí)體是帶有小數(shù)部分的數(shù)字。我們不僅可以用與存儲(chǔ)小數(shù)部分,還可以使用DECIMAL存儲(chǔ)比BIGINT(能表示20位,18..)還大的整數(shù)。之前看到公司老系統(tǒng)中使用DECIMAL來表示數(shù)字類型一直不明白,可能存在這個(gè)原因。 ? ? ?在需要對(duì)小數(shù)進(jìn)行精確計(jì)算時(shí),才使用DECIMAL來表示(mysql5.0以上)5:字符串類型
? varchar和char在不同的存儲(chǔ)引擎中存儲(chǔ)方式不一樣。? ?varchar
? ?varchar類型用于存儲(chǔ)可變長(zhǎng)字符串,比定長(zhǎng)類型更節(jié)省空間,它僅使用必要的空間,如varchar(20) "abc" 僅使用3個(gè)字節(jié),但是它會(huì)再拿出1或2個(gè)字節(jié)來記錄字符串長(zhǎng)度(大于255字節(jié)為2個(gè)),存儲(chǔ)時(shí)會(huì)保留末尾空格,對(duì)于varchar來說最好的策略是只分配真正需要的空間。? ?使用情況:如果字符串列的最大長(zhǎng)度比平均長(zhǎng)度大很多;列的更新很少,所以碎片不是問題;使用了UTF-8這樣的復(fù)雜字符集。
? ? Char
? ? char 類型是定長(zhǎng),會(huì)刪除所有的末尾空格,會(huì)根據(jù)需要采用空格進(jìn)行填充以方便比較。使用情況:適合存儲(chǔ)很短的字符串,或者所有值都接近一個(gè)長(zhǎng)度,比如char 非常適合存儲(chǔ)密碼的MD5值,因?yàn)樗且粋€(gè)定長(zhǎng)。我們可以使用char(1) 來存儲(chǔ)只有Y和N的值,它只需要一個(gè)字節(jié),而如果使用varchar(1)會(huì)占用兩個(gè)字節(jié)。對(duì)于經(jīng)常改變的數(shù)據(jù),char也更好。
6:日期和時(shí)間類型
datetime 能保存大范圍的值,從1001-9999年,精度為秒,格式Y(jié)YYYMMDDHHMMSS的整數(shù)中,和時(shí)區(qū)無關(guān) ? ? ?? ? ? ?timestamp
?保存了從1970年1月1日午夜的秒數(shù),到2038年,顯示的值和時(shí)區(qū)有關(guān)系。總結(jié)
以上是生活随笔為你收集整理的《高性能MySQL》之选择优化的数据类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(46):页面导入样式时,使用l
- 下一篇: MySQL 分区表——《高性能MySQL