基于this question,我相信mysql确实的确索引了空值。 我正在尝试优化一个sql服务器,我想知道该服务器是否具有索引空值;有没有办法检查索引的NULL值?
答案 0 :(得分:1)
忽略,忽略,忽略!
索引是否包含0个字节,1个字节,2个字节或NULL的几个字节-这在事物的总体方案中微不足道。
BTree(您正在谈论的是BTree索引)可向下钻取很少的级别(对于 billion 行,可能为5个级别)。即使索引中的每个“行”的大小加倍,BTree的深度仍可能只有5级。 “ 5”是“点查询”的成本。这与条目中的绒毛无关。
手册页是MyISAM是唯一引擎时的可能遗留物。 InnoDB的出现并不一定要更新这样的细节,更不用说其4 ROW_FORMATs
。
也不信任EXPLAIN
。当它说Key_len
时,只给出了条目大小的线索。
INT NOT NULL -- 4 -- meaning 4 bytes
INT NULL -- 5 -- implying an extra byte for NULL
VARCHAR(10) CHARACTER SET utf8 -- 32 -- 2 for length (might be only 1) + 3*10
但是varchars不占用32个字节;它们是可变长度。
答案 1 :(得分:0)
如果索引所指向的表列具有空值,则表示该索引也将包含在索引中。
答案 2 :(得分:0)
据我所知,您无法在索引本身中查询空值,但始终可以使用where column_name IS NULL
条件来检查一列中是否为空值,然后从那里开始。