NULL為什么多人用?
1、NULL是創(chuàng)建數(shù)據(jù)表時(shí)默認(rèn)的,初級(jí)或不知情的或怕麻煩的程序員不會(huì)注意這點(diǎn)。
2、很多人員都以為not null 需要更多空間,其實(shí)相反。
3、重點(diǎn)是很多程序員覺得NULL在開發(fā)不用去判斷插入數(shù)據(jù),寫sql語句的時(shí)候更方便快捷。
那么將字段設(shè)置成允許null有什么壞處呢?
1:查詢語句中包含允許null字段的那些查詢,mysql難以優(yōu)化,而且它會(huì)使索性、索引統(tǒng)計(jì)和值更加復(fù)雜。
2:可空列需要更多的存儲(chǔ)空間。官方文檔中寫到:“NULL columns require additional space in the rowto record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”就是說允許為空的字段需要一個(gè)額外字節(jié)作為判斷是否為NULL的標(biāo)志位。
3:能導(dǎo)致myisam索引中固定大小索引變成可變大小索引。
基于以上說明,字段設(shè)置成not null比設(shè)置成allow null要好很多,那在生產(chǎn)環(huán)境中把那些allow null的字段改成not null的字段會(huì)怎樣?
一方面:可能有些記錄,這個(gè)字段已經(jīng)是空的,所以改成not null會(huì)失敗
另一方面,有人提到說將allow null改成 not null對(duì)性能提升很小。對(duì)這一點(diǎn)不是很清楚。