1. 更小的通常更好
一般情況下,應(yīng)該盡量使用可以正確存儲(chǔ)數(shù)據(jù)的最小數(shù)據(jù)類型。例如只需要存儲(chǔ) 0-200 的數(shù)字,tinyint unsigned 更好。但是要確保沒(méi)有低估需要存儲(chǔ)的值的范圍,否則在數(shù)據(jù)表中修改數(shù)據(jù)類型的范圍會(huì)比較麻煩。
2. 簡(jiǎn)單就好
簡(jiǎn)單數(shù)據(jù)類型的操作通常需要更少的 CPU 周期。例如,整數(shù)比字符操作代價(jià)更低,因?yàn)樽址托?duì)規(guī)則使字符比較比整型更復(fù)雜。使用 Mysql 內(nèi)建的類型而不是字符串來(lái)存儲(chǔ)日期和時(shí)間。
3.盡量避免NULL
Mysql 默認(rèn)列的屬性是 NULL,通常情況下最好制定列為 NOT NULL,除非真的需要存儲(chǔ) NULL 值。如果查詢中包含可為 NULL 的列,對(duì) Mysql 來(lái)說(shuō)更難優(yōu)化,因?yàn)榭蔀?NULL 的列使得索引、索引統(tǒng)計(jì)和值比較都更復(fù)雜??蔀?NULL 的列會(huì)使用更多的存儲(chǔ)空間,在 Mysql 里也需要特殊處理。當(dāng)可為 NULL 的列被索引時(shí),每個(gè)索引記錄需要一個(gè)額外的字節(jié),在 MyISAM 引擎中甚至還可能導(dǎo)致固定大小的索引變成可變大小的索引。通常把可為 NULL 的列改為 NOT NULL 帶來(lái)的性能提升比較小,但是,如果計(jì)劃在列上建立索引,就應(yīng)該盡量避免設(shè)計(jì)成可為 NULL 的列。
文章同步發(fā)布在我的個(gè)人博客中,傳送門(mén)Hesunfly Blog