MySQL中什么时候使用null_何时在MySQL表中使用NULL

However, I have often read about

performance problems when fields are

nullable and been advised to use an

empty string in cases where NULL is

actually semantically correct.

我要对字的选择有点挑剔:

>即使它是一个重要的性能因素,这不会使语义正确使用值而不是NULL。在SQL中,NULL具有语义角色,用于表示丢失或不适用的值。在给定的RDBMS实现中的NULL的性能特性与此无关。性能可能因品牌或版本而异,但语言中NULL的目的是一致的。

在任何情况下,我没有听说过任何证据表明NULL执行不好。我对任何对性能测量的引用感兴趣,表明可空列的性能比不可为空的列差。

我不是说我没有错,或者它在某些情况下不能是真的 – 只是,使空闲的假设没有意义。科学不是由猜想构成;必须显示具有可重复测量的证据。

指标还告诉你性能有多少不同,所以你可以判断它是否值得担心的事情。也就是说,影响可以是可衡量的和非零的,但与更大的性能因素相比仍然微不足道,例如正确地索引表或调整数据库缓存大小。

在MySQL中,搜索NULL可以从索引中获益:

mysql> CREATE TABLE foo (

i INT NOT NULL,

j INT DEFAULT NULL,

PRIMARY KEY (i),

UNIQUE KEY j_index (j)

);

mysql> INSERT INTO foo (i, j) VALUES

(1, 1), (2, 2), (3, NULL), (4, NULL), (5, 5);

mysql> EXPLAIN SELECT * FROM foo WHERE i = 3;

+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+

| 1 | SIMPLE | foo | const | PRIMARY | PRIMARY | 4 | const | 1 | |

+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+

mysql> EXPLAIN SELECT * FROM foo WHERE j IS NULL;

+----+-------------+-------+------+---------------+---------+---------+-------+------+-------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+------+---------------+---------+---------+-------+------+-------------+

| 1 | SIMPLE | foo | ref | j_index | j_index | 5 | const | 2 | Using where |

+----+-------------+-------+------+---------------+---------+---------+-------+------+-------------+

请注意,它仍然不是性能的衡量标准。我只显示你可以使用索引,同时搜索NULL。我要断言(不可否认,没有测量,但嘿这只是StackOverflow),索引的好处遮蔽了任何可能的惩罚,当搜索NULL对一个空白字符串。

选择零或空白或任何其他值来替代NULL不是正确的设计决策。您可能需要在列中使用这些值作为重要值。这就是为什么NULL存在,作为一个值,通过定义在任何数据类型的值的域之外,所以你可以使用整数或字符串或任何值的完整范围的值,仍然有一些东西表示“没有上述的值。 “。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值