選擇優化的資料型別需要注意的幾點
1、盡量使用可以正確儲存資料的最小資料型別,更小的資料型別通常占用更少的磁碟、記憶體、cup快取,並且處理時需要的cpu週期也更少
2、簡單資料型別的操作通常需要更少的cup週期,例如整型比字元操作代價更低
3、避免使用null,因為查詢中包含可為null的列,對mysql來說更難優化,因為可為null的列使得索引、索引統計和值比較更為複雜,可為null的列會使用更多的儲存空間,在mysql中也需要特殊處理,當可為null的列被索引時,每個索引記錄需要乙個額外的位元組。
4、datetime和timesamp列都可以儲存相同型別的資料,但是timestamp只使用datetime一半的儲存空間,並且會根據時區變化,具有特殊的自動更新能力,但是timestamp的允許的時間範圍會小的多,通常應該盡量使用timestamp,因為它比datetime空間效率更高
5、整數型別有符號和無符號型別使用相同的儲存空間並具有相同的效能,因此可以根據實際情況選擇合適的型別
6、浮點型別在儲存同樣範圍的值時,通常比decimal使用更小的空間,float使用4個字元儲存,double占用8個位元組,相比float有更高的精度和更大的範圍,mysql使用double作為內部浮點計算的型別,和整數型別一樣,能選擇的只是儲存型別,mysql使用double作為內部浮點計算的型別,因為需要額外的空間和計算開銷,所以應該盡量只在對小樹進行精確計算時才使用decimal---例如儲存財務資料,但是在資料量比較大的時候,可以考慮使用bigint代替decimal,將需要儲存的貨幣單位根據小數的位數乘以相應的倍數即可。
7、字元型varchar需要使用1或者2個額外位元組記錄字串的長度,如果列的最大長度大於或者等於255位元組,則只使用乙個位元組表示,否則使用2個位元組,假設採用lation1字符集,乙個varchar(10)的列需要11個位元組的儲存空間,varchar(1000)的列則需要1002個位元組,因為需要2個位元組儲存長度資訊
適合varchar型別的場景,字串列的最大長度比平均長度大很多,列的更新很少,所以碎片不是問題,因為varchar列經常update操作可能使行變得比原來更長,這就需要額外的工作。
char值會根據需要採用空格進行填充,適合儲存很短的字串,或者所有值都接近同乙個長度,chanr非常適合儲存秘密的md5值,對於經常變更的資料,char也比varchar更好,因為定長的char型別不容易產生碎片,對於非常短的列,char比varchar在儲存空間上也更有效率
8、避免使用blob和text型別
9、列舉型別最不好的地方是字串列表是固定的,新增或者刪除字串必須使用alter table
10、通用的設計實踐,在查詢表時採用整數主鍵而避免採用基於字串的值進行關聯
選擇優化資料型別的簡單原則
1,應該盡量使用可以正確儲存的最小資料型別 更小的資料型別通常更快,因為他們占用更小的磁碟 記憶體和cpu快取,並且處理時需要的cpu週期也更小。2,簡單就好。簡單資料型別的操作通常需要更少的cpu週期。例如,整型比字元操作代價更低,因為字符集和校對規則 排序規則 使字元比整型更複雜。3,盡量避免n...
mysql優化之選擇資料型別
對資料型別的選擇,可以影響索引的使用,進而影響效能,本博文簡單的說明如何在使用中,選擇資料型別,以幫助查詢過程中,查詢命令能夠更加快速的執行。應該盡可能多的使用數值操作,而不是字串操作。這個好像是顯而易見的,在字串的儲存和比較過程,需要多個位元組的參與。如果 小 型別夠用,就不要選用 大 型別。資料...
MySQL資料型別 選擇與優化
mysql資料型別 數值 日期 時間 字串 字元 型別 復合型別。一般情況下選擇可以正確儲存資料的最小資料型別。越小的資料型別通常更快,占用磁碟,記憶體和cpu快取更小,大大減少io開銷。簡單的資料型別的操作通常需要更少的cpu週期。例如 整型比字元操作代價要小得多,因為字符集和校對規則 排序規則 ...