原文鏈接:http://blog.csdn.net/u013412790/article/details/51615407
數(shù)據(jù)庫類型的選擇對數(shù)據(jù)庫的性能影響很大
1 . 數(shù)據(jù)類型會影響存儲空間的開銷
2 . 數(shù)據(jù)類型會影響數(shù)據(jù)查詢性能
所以當(dāng)一個數(shù)據(jù)類型可以有多種選擇多種類型的時候,應(yīng)該優(yōu)先考慮數(shù)字類型,其次是日期或二進(jìn)制類型,最后應(yīng)該是字符類型。對于相同級別的數(shù)據(jù)類型,應(yīng)該優(yōu)先選擇占用空間小的數(shù)據(jù)類型。
原理:在對數(shù)據(jù)進(jìn)行比較(查詢條件,JOIN條件及排序)操作時:同樣的數(shù)據(jù),字符處理往往比數(shù)字處理慢,而且在數(shù)據(jù)庫中,數(shù)據(jù)的處理是以頁為單位,列的長度越小,數(shù)據(jù)類型占用的空間越小,利于性能的提升。
下面是字段類型所占的字節(jié)大小
1 .從 0 到 255 的整型數(shù)據(jù)。存儲大小為 1 字節(jié)。適合使用Tinyint
2.從 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型數(shù)據(jù)。存儲大小為 2 個字節(jié)。適合使用smallint
3.從 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型數(shù)據(jù)(所有數(shù)字)。存儲大小為 4 個字節(jié)。int 的 SQL-92 同義字為 integer。適合使用int
4.從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數(shù)據(jù)(所有數(shù)字)。存儲大小為 8 個字節(jié)。適合使用bigint
1.如果列中要存儲的數(shù)據(jù)的長度差不多是一致的,則應(yīng)該考慮char,否則應(yīng)該考慮用varchar.
2.如果列中最大數(shù)據(jù)的長度小于50Byte,則一般也考慮使用char(當(dāng)然,如果這個列很少用,則基于節(jié)省空加你和減少I/O的考慮,還是可以使用varchar)
3.一般不宜定義大雨50Byte的char類型列。
注意:utf8每一個字符時3Byte
1.decimal用于存儲精確數(shù)據(jù),而float只能用于存儲非精確數(shù)據(jù),故精確數(shù)據(jù)最好使用decimal類型
2.由于float的存儲空間的開銷一般比decimal?。ň_到7為小數(shù)只需要4個字節(jié),而精確到15位小數(shù)只需要8個字節(jié))故非精確數(shù)據(jù)類型建議使用float
1.使用int來存儲時間字段的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):字段的長度比datetime小
缺點(diǎn):使用不方便,需要函數(shù)進(jìn)行轉(zhuǎn)換
限制:只能存儲到2038-1-19 11:14:07 即2^32為2147483648
2,需要考慮需要存儲時間的粒度
年 月 日 小時 分鐘 秒 周