database 空值問題

xuexiaogang發表於2023-01-12

很多人喜歡把欄位預設設定為空,然後用空去判斷邏輯。比如select * from t where xx is null.其實這種做法有較大的問題。我們例舉一下:如圖1

database 空值問題

                                    圖1

然後我們對不同的列分別聚合一下。如圖2.

database 空值問題

                                              圖2.

每個SQL都是全表查詢。但是count的值卻不一樣。因為null 不計入。所以我們對列建立索引的時候,索引也不包括null。(一般來說都這樣)

所以一般where xx is null也基本上用不到索引(極端情況另外再說)。這也就是我說不要用null作為業務判斷的原因。

一般資料庫都這樣。比如MySQL 如圖3.

database 空值問題

                                                                                         圖3

下面看兩個儲存過程。

database 空值問題

如圖4,分別執行這兩個儲存過程。

database 空值問題

                                            圖4

這個儲存過程不是我獨創的,主要是說明null既不屬於大於0也不屬於小於0.

這就是其實我們一般對null 有一個誤解。我們一直理解是空。但是實際上理解為 “不確定”更加好一些。如果這樣理解,那麼我們就不會去在程式中寫is null了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2932029/,如需轉載,請註明出處,否則將追究法律責任。

相關文章