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