Mysql 索引为Null

量避免NULL:应该指定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化。
因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。

--------------------------------------------------

null会影响索引的统计,一般会默认null为同一个值,这样这个索引的筛选价值就降低了,影响优化器的判断。当然也可以调整参数,使得null被认为是不同的值。

-----------------------------------------------

怎么理解呢?

---------------------------------------------

先看空值跟null的区别。mysql官方:
“NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”

Mysql难以优化引用可空列查询,它会使索引、索引统计和值更加复杂。可空列需要更多的存储空间(见上面的e文),还需要mysql内部进行特殊处理。可空列被索引后,每条记录都需要一个额外的字节,还能导致MYisam 中固定大小的索引变成可变大小的索引。这也是《高性能mysql第二版》介绍的。
————————————————
版权声明:本文为CSDN博主「imzoer」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/imzoer/article/details/8518610

原文地址:https://www.cnblogs.com/kunlunmountain/p/13271867.html