char 與 varchar
char 屬于固定長度的字符類型床玻,而 varchar 屬于可變長度的字符類型
檢索時(shí) char 會(huì)刪除尾部的空格
-
不同存儲(chǔ)引擎使用建議
MyISAM:char
MEMORY:char
InnoDB:varchar
text 與 blob
二者的主要差別是 blob 能用來保存二進(jìn)制數(shù)據(jù),而 text 只能保存字符數(shù)據(jù)
-
blob 和 text 值會(huì)引起一些性能問題吕世,特別是在執(zhí)行了大量的刪除操作時(shí)
刪除操作會(huì)在數(shù)據(jù)表中留下很大的空洞,以后填入這些空洞的記錄在插入的性能上會(huì)有影響。微了提高性能,建議定期使用
optimize table
功能對(duì)這類表進(jìn)行碎片整理疼阔,避免因?yàn)榭斩磳?dǎo)致性能問題 -
可以使用合成的(Synthetic)索引來提高大文本字段的查詢性能
合成索引就是根據(jù)大文本字段的內(nèi)容建立一個(gè)散列值,并把這個(gè)值存儲(chǔ)在單獨(dú)的數(shù)據(jù)列中,接下來就可以通過檢索散列值找到數(shù)據(jù)行了婆廊。但是迅细,要注意這種技術(shù)只能用于精確匹配的查詢√粤冢可以使用
md5()
茵典,sha1()
,或crc32()
函數(shù)生成散列值 在不必要的時(shí)候避免檢索大型的 blob 或 text 值
把 blob 或 text 分離到單獨(dú)的表中
浮點(diǎn)數(shù)和定點(diǎn)數(shù)
- 浮點(diǎn)數(shù)一般用于表示含有小數(shù)點(diǎn)的數(shù)值宾舅。當(dāng)一個(gè)字段被定義為浮點(diǎn)類型后统阿,如果插入數(shù)據(jù)的精度超過該列定義的實(shí)際精度,則插入值會(huì)被四舍五入到實(shí)際定義的精度值
- 定點(diǎn)數(shù)是以字符串形式存放的筹我,所以定點(diǎn)數(shù)可以更精確的保存數(shù)據(jù)
- 浮點(diǎn)數(shù)會(huì)產(chǎn)生誤差扶平,避免與浮點(diǎn)數(shù)的比較
日期類型選擇
- 根據(jù)實(shí)際需要選擇能夠滿足應(yīng)用的最小存儲(chǔ)的日期類型
- 如果要記錄年月日時(shí)分秒,并且記錄的年份比較久遠(yuǎn)蔬蕊,那么最好使用 datetime结澄,而不要使用 timestamp。因?yàn)?timestamp 表示的日期范圍比 datetime 要短的多
- 如果記錄的日期需要讓不同時(shí)區(qū)的用戶使用岸夯,那么最好使用 timestamp麻献,因?yàn)槿掌陬愋椭兄挥兴軌蚝蛯?shí)際的時(shí)區(qū)相對(duì)應(yīng)