MySQL中與NULL相關的的問題

  1. 很多表都包含可爲NULL的列,即使應用程序並不需要保存NULL也是如此,這是因爲可爲NULL是列的默認屬性(TIMESTAMP除外),然而通常情況下最好指定列爲NOT NULL,除非真的需要存儲NULL值
  2. 如果查詢中包含可爲NULL的列,對MySQL來說更難優化,因爲可爲NULL的列使得索引統計和值比較更加複雜。可爲NULL的列會使用更多的存儲空間,在MySQL裏也需要特殊的處理。當可爲NULL的字段被索引時,每個索引記錄需要一個額外的字節,在MyASIM裏甚至還可能導致固定大小的索引(例如只有一個整數列的索引)變成可變大小的索引。
  3. 通常把可爲NULL的列改爲NOT NULL帶來的性能提升比較小,所以(調憂時)沒有必要首先在現有schema中查找並修改這種情況,除非確定這會導致問題。但是,如果計劃在列上建索引,就應該儘量避免設計爲NULL的列。當然也有一些例外,例如值得一提的是,InnoDB使用單獨的位(Bit)存儲NULL值,所以對於稀疏數據(很多值爲NULL,只有少數行是非NULL)有很好的空間效率。但這一點不適用於MyISAM。
    引用自《高性能MySQL-第三版》第四章 Schema與數據類型優化

操作實驗

1、在建表或修改表字段時,默認爲DEFAULT NULL 直接設置爲NULL 效果一樣,通常設置爲 NOT NULL。
2、當設置爲 NOT NULL 時不能插入NULL 或不插入值。
3、查詢時用 IS NULL 或 IS NOT NULL 進行條件判斷。
4、空值 ‘’ 不佔用空間,NULL佔用少量空間。
5、建議爲各種類型設置默認值和不爲空。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章