database 空值问题

时间:2023-01-16 18:10:57

很多人喜欢把字段默认设置为空,然后用空去判断逻辑。比如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了。