這樣做的缺點是什麼?在MySQL中將某些字段/列的默認值設置爲NULL是否是一種很好的做法?
回答
允許列爲空的缺點影響業務邏輯 - null意味着沒有價值關聯,但可能會有。如果這對您的業務規則不正確,那麼該列不應允許其中存在空值。
在某些情況下,NULL值已知在查詢執行過程中代價昂貴,而某些數據庫不會評估兩個值爲null的列是否等效。
順便說一句:儘管你可以設置一個DEFAULT約束來使列的值爲null,但這比需要更多的工作。如果列允許空值存在 -
- 列名
- 爲列
- 的可選性數據類型:創建或更改表時,有三個組成部分列定義
將MySQL的某些字段/列的 默認值設置爲 NULL是否是一種很好的做法?
我想是的。由於NULL佔用最小內存,不考慮數據類型
我覺得沒有;-) 節省空間通常是無關緊要的,但得到奇怪的結果,當你不知道如何使用空的風險變得更高。 – Brimstedt
將它設置爲默認沒有任何缺點,因爲只要您沒有爲其設置值,它就很重要。
如果值變爲NULL,則可能會影響查找。這是因爲MySQL通過文件查找,並且跳過已知長度的字段很容易,因爲您只需跳過該長度。但是如果一個列可能包含NULL,那麼在跳轉之前需要檢查該列。雖然沒有太多時間,所以我認爲這不重要。
優點顯然節省空間,但存儲成本低廉。畢竟是2009年。
查找東西的最快方法是將所有列設置爲NOT NULL,而是使用諸如空字符串和-1(甚至0,如果這不意味着別的)存儲'空'值的東西。它不佔用太多的空間,並且總是更快,因爲數據的長度是有保證的。
雖然,如果您的數據庫相對較小並且不需要在2毫秒內過濾8億行,那麼可以隨意使用NULL值。 ;)
+1 ..好推理 – Xinus
根據您的DBMS,NULL將是默認的默認值。也就是說,只要你不提供一個值,並且沒有設置默認值(當然NULL不被禁止),就會存儲NULL。
當值被解釋時,NULLS的實際成本來了。 SQL用法在評估可能涉及NULL的表達式時使用了一種奇怪的,有時違反直覺的三值邏輯。第三個值是UNKNOWN,違反直覺的部分是NOT UNKNOWN等於UNKNOWN。如果你不小心,你可能會得到錯誤的結果。
像SUM(列)甲統計可以被低估如果一些條目在列有NULL,和那些條目具有在真實世界中的值。
但在頭真正踢來自數據庫設計師和程序員傾向使用NULL來傳達某種有意義的信息,而不是僅僅「無數據HERE」。這幾乎總是會導致邏輯錯誤。如果你有數據,存儲數據。如果你沒有數據,也沒有選擇它,存儲一個NULL。不要讓數據缺失導致自己被誤導。
僅從列定義省略NOT NULL
有時也有顯著的性能影響。所以我已經習慣於儘可能地包括它。
- 1. 將變量設置爲「Nothing」是一種很好的做法?
- 2. 在模型中設置Flash消息是否是一種很好的做法?
- 3. 存儲計算值是否是一種很好的做法?
- 4. 使用NULL的默認值是否好?
- 5. 您是否認爲ASP.NET WebForms是一種不好的做法?
- 6. 取消設置cookie過期參數是否是一種很好的做法?
- 7. 總是加入SQL表是否是一種很好的做法?
- 8. JavaScript:window.spam是一種很好的做法嗎?
- 9. 是否將活動實例保存在WeakReference中是一種很好的做法
- 10. 在Redux商店中配置是否是一種好的做法?
- 11. 拆分CSS是否是一種很好的做法?
- 12. 將canvas設爲JavaScript中的全局對象是否是一種好的做法?
- 13. 在這種情況下取消設置PHP變量是否被認爲是很好的做法?
- 14. 將MySQL字段重置爲默認值
- 15. 將字段默認值設置爲某個計算的結果
- 16. 是否使用Java的默認包是一種不好的做法?
- 17. 允許非必填字段接受NULL值是否是一種好習慣? Mysql
- 18. 使用擴展方法來設置默認屬性是否是一種好的做法?
- 19. 將該列的值設置爲NULL值的默認值
- 20. 將默認值設置爲Mysql中的數字列
- 21. 設置默認的數據列值,好的做法?
- 22. 爲什麼某些MySQL字段現在需要默認值?
- 23. 將特定的NSTimeInterval傳遞給setMinimumBackgroundFetchInterval是否是一種很好的做法?
- 24. 爲XStream中不是XML的字段設置默認值
- 25. 緩存片段是一種很好的做法嗎?
- 26. 手動更改外鍵值是否是一種很好的做法?
- 27. 老版本的PHP/MYSQL是否有NOT NULL列的默認值?
- 28. 設置在Django模型字段默認值更好的辦法
- 29. 配置tomcat部署某些應用程序是否被認爲是好的/不好的做法?
- 30. 在元標記中存儲csrf標記是否是一種很好的做法?
設置一個默認的NULL值是好的。不好的是做一個SELECT FROM TABLE WHERE COLUMN是NULL ....這可能確實很慢。 –