2009-12-19 53 views

回答

1

允許列爲空的缺點影響業務邏輯 - null意味着沒有價值關聯,但可能會有。如果這對您的業務規則不正確,那麼該列不應允許其中存在空值。

在某些情況下,NULL值已知在查詢執行過程中代價昂貴,而某些數據庫不會評估兩個值爲null的列是否等效。

順便說一句:儘管你可以設置一個DEFAULT約束來使列的值爲null,但這比需要更多的工作。如果列允許空值存在 -

  1. 列名
  2. 爲列
  3. 的可選性數據類型:創建或更改表時,有三個組成部分列定義
+0

設置一個默認的NULL值是好的。不好的是做一個SELECT FROM TABLE WHERE COLUMN是NULL ....這可能確實很慢。 –

0

將MySQL的某些字段/列的 默認值設置爲 NULL是否是一種很好的做法?

我想是的。由於NULL佔用最小內存,不考慮數據類型

+1

我覺得沒有;-) 節省空間通常是無關緊要的,但得到奇怪的結果,當你不知道如何使用空的風險變得更高。 – Brimstedt

3

將它設置爲默認沒有任何缺點,因爲只要您沒有爲其設置值,它就很重要。

如果變爲NULL,則可能會影響查找。這是因爲MySQL通過文件查找,並且跳過已知長度的字段很容易,因爲您只需跳過該長度。但是如果一個列可能包含NULL,那麼在跳轉之前需要檢查該列。雖然沒有太多時間,所以我認爲這不重要。

優點顯然節省空間,但存儲成本低廉。畢竟是2009年。

查找東西的最快方法是將所有列設置爲NOT NULL,而是使用諸如空字符串和-1(甚至0,如果這不意味着別的)存儲'空'值的東西。它不佔用太多的空間,並且總是更快,因爲數據的長度是有保證的。

雖然,如果您的數據庫相對較小並且不需要在2毫秒內過濾8億行,那麼可以隨意使用NULL值。 ;)

+0

+1 ..好推理 – Xinus

0

根據您的DBMS,NULL將是默認的默認值。也就是說,只要你不提供一個值,並且沒有設置默認值(當然NULL不被禁止),就會存儲NULL。

當值被解釋時,NULLS的實際成本來了。 SQL用法在評估可能涉及NULL的表達式時使用了一種奇怪的,有時違反直覺的三值邏輯。第三個值是UNKNOWN,違反直覺的部分是NOT UNKNOWN等於UNKNOWN。如果你不小心,你可能會得到錯誤的結果。

像SUM(列)甲統計可以被低估如果一些條目在列有NULL,和那些條目具有在真實世界中的值。

但在頭真正踢來自數據庫設計師和程序員傾向使用NULL來傳達某種有意義的信息,而不是僅僅「無數據HERE」。這幾乎總是會導致邏輯錯誤。如果你有數據,存儲數據。如果你沒有數據,也沒有選擇它,存儲一個NULL。不要讓數據缺失導致自己被誤導。

0

僅從列定義省略NOT NULL有時也有顯著的性能影響。所以我已經習慣於儘可能地包括它。

相關問題