第四章
選擇數(shù)據(jù)類(lèi)型:
- 越小越好
- 簡(jiǎn)單就好仲翎,整型比字符串好耽梅,內(nèi)建date,time類(lèi)型库倘,ip用整型
- 盡量避免使用NULL曹锨,可為null的列使得建立索引更加復(fù)雜孤个,一般在建立索引的列設(shè)置為NOT NULL
數(shù)據(jù)類(lèi)型:
整型
- 整數(shù),TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT沛简,1/2/3/4/8字節(jié)齐鲤,
UNSIGNED無(wú)符號(hào),整數(shù)計(jì)算(聚合)時(shí)一般使用64位整數(shù)椒楣,
指定寬度给郊,不限制值,只是規(guī)定了交互顯示的個(gè)數(shù) - 實(shí)數(shù)捧灰,F(xiàn)LOAT, DOUBLE浮點(diǎn)數(shù)淆九,4/8字節(jié),近似計(jì)算毛俏;DECIMAL存儲(chǔ)精確小數(shù)炭庙,5.0之后實(shí)現(xiàn)高精度計(jì)算,速度比浮點(diǎn)數(shù)慢
指定精度煌寇,- DECIMAL(a, b)焕蹄,小數(shù)點(diǎn)前后總共有a個(gè)數(shù)字,點(diǎn)后有b個(gè)數(shù)字唧席,(點(diǎn)前有a-b個(gè)數(shù)字)擦盾,5.0以上版本將數(shù)字打包保存在一個(gè)二進(jìn)制字符串中,4個(gè)字節(jié)存9個(gè)數(shù)字
- FLOAT(a, b)淌哟,DOUBLE(a, b)迹卢,數(shù)字(不包括小數(shù)點(diǎn))最大長(zhǎng)度是a,小數(shù)部分長(zhǎng)度為b徒仓,超過(guò)四舍五入
盡量不要使用DECIMAL腐碱,可用整數(shù)代替金融類(lèi)高精度計(jì)算
字符串
VARCHAR
變長(zhǎng),1-2個(gè)字節(jié)存儲(chǔ)字符串長(zhǎng)度
update時(shí)掉弛,若長(zhǎng)度變長(zhǎng)症见,頁(yè)裝不下,額外工作
5.0以上殃饿,VARCHAR(n)谋作,表示存n個(gè)字符,漢字或者英文
單行最大長(zhǎng)度為65535
5.0之后乎芳,保留末尾空格
InnoDB遵蚜,把過(guò)長(zhǎng)的varchar存儲(chǔ)為blobCHAR
定長(zhǎng),刪除末尾空格
適合存儲(chǔ)奈惑,短吭净,長(zhǎng)度差不多,不容易產(chǎn)生碎片
二進(jìn)制字符串:BINARY/VARBINARY肴甸,字節(jié)碼
大文本:BLOB寂殉,TEXT
獨(dú)立對(duì)象處理,太大時(shí)使用外部存儲(chǔ)區(qū)域原在,實(shí)際存儲(chǔ)1-4個(gè)字節(jié)的指針友扰,指向外部存儲(chǔ)空間
不能做索引,使用substring排序或者索引前面一段
枚舉:ENUM
日期和時(shí)間
MySQL最小時(shí)間粒度為秒晤斩。
DATETIME
日期時(shí)間
大范圍焕檬,0000-9999,秒澳泵,8字節(jié)实愚,
默認(rèn)yyyy-MM-dd hh:mm:ssTIMESTAMP
時(shí)間戳
從1970-01-01 00:00:00以來(lái)的秒數(shù),4字節(jié)兔辅,到2038年
Unix時(shí)間戳相同:FROM_UNIXTIME(unix)腊敲,Unix_TIMESTAMP(stamp)
位
- BIT
- SET
緩存表和匯總表
滿(mǎn)足檢索的需求,避免復(fù)雜昂貴的實(shí)時(shí)更新操作:在同一張表中保存衍生的冗余數(shù)據(jù)维苔,或碰辅,創(chuàng)建一張完全獨(dú)立的匯總表或緩存表