日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

《高性能MySQL》之选择优化的数据类型

發(fā)布時(shí)間:2023/12/10 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《高性能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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。